2010-10-06 34 views

Trả lời

5

Từ Qt tài liệu QSharedDataPointer

Các QSharedDataPointer lớp đại diện cho một con trỏ đến một đối tượng ngầm chia sẻ. QSharedDataPointer làm cho việc viết riêng của bạn hoàn toàn dễ dàng hơn các lớp học chia sẻ. QSharedDataPointer thực hiện đếm tham chiếu an toàn theo chủ đề, đảm bảo rằng thêm QSharedDataPointers vào reentrant các lớp học của bạn sẽ không làm cho chúng không reentrant. Chia sẻ ngầm định được nhiều lớp Qt sử dụng để kết hợp tốc độ và hiệu quả bộ nhớ của con trỏ với các lớp học dễ dàng sử dụng . Xem trang Chia sẻ Lớp học để biết thêm thông tin.

Ví dụ sử dụng -

#include <QSharedData> 
#include <QString> 

class EmployeeData : public QSharedData 
{ 
    public: 
    EmployeeData() : id(-1) { } 
    EmployeeData(const EmployeeData &other) 
     : QSharedData(other), id(other.id), name(other.name) { } 
    ~EmployeeData() { } 

Đối QSharedPointer

Lớp QSharedPointer giữ một tham chiếu mạnh đến một con trỏ chia sẻ Các QSharedPointer là một tự động, con trỏ được chia sẻ trong C++. Nó hoạt động chính xác như một con trỏ bình thường cho các mục đích thông thường là , bao gồm cả sự tôn trọng constness. QSharedPointer sẽ xóa con trỏ nó đang giữ khi nó đi ngoài phạm vi, không cung cấp các đối tượng khác QSharedPointer đang tham chiếu nó.

> QSharedPointer<MyObject> obj = 
>   QSharedPointer<MyObject>(new MyObject); 

Vì vậy, QSharedDataPointer được sử dụng để làm cho việc tạo lớp implicititly chia sẻ. Trong khi QSharedPointer là một tham chiếu đếm con trỏ thông minh trỏ đến các lớp.


EDIT

Khi đọc Memory management in Qt?, tôi tìm thấy liên kết này http://labs.qt.nokia.com/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/. Một cuộc thảo luận thực sự tuyệt vời về các con trỏ thông minh khác nhau Qt có (API hiện tại có 8).

+0

Tôi nghĩ rằng tôi đang thiếu một điểm; theo như tôi có thể đọc, chúng ta có thể thực hiện ví dụ Employee với QSharedDataPointer, đã có với QSharedPointer. Bắt là gì? –

+4

QSharedDataPointer là để triển khai sao chép nông, tức là chia sẻ dữ liệu, của dữ liệu lớp giữa nhiều phiên bản của lớp. Tài liệu tham khảo cho thấy lớp kế thừa QSharedDataPointer. Vì vậy, nó là nội bộ cho lớp. QSharedPointer là một EXTERNAL cho lớp và thực hiện một con trỏ đếm tham chiếu đến một cá thể duy nhất của một lớp. Vì vậy, nó cho phép nhiều con trỏ trỏ đến cùng một cá thể lớp. –

+1

QSharedDataPointer là một cách tiện lợi để thực hiện copy-on-write và detaches/sao chép đối tượng của nó khi nó được truy cập một cách không const. Nó có giới hạn mà đối số mẫu cần phải kế thừa từ QSharedData. –

Các vấn đề liên quan