2009-09-26 42 views
18

Giống như nó đã được viết here Qt cho đến nay có 8 lớp con trỏ thông minh specilized. Có vẻ như đó là tất cả những gì bạn cần. Tuy nhiên, để sử dụng bất kỳ con trỏ thông minh nào, lớp của bạn phải được bắt nguồn từ QObject không phải lúc nào cũng thuận tiện. Có các triển khai khác của con trỏ thông minh trong Qt làm việc với các lớp tùy ý không?Con trỏ thông minh trong Qt

+8

Thực ra, đối với hầu hết các con trỏ bạn không cần phải lấy được từ QObject, tôi không nghĩ vậy. Có một số thứ khác mà các lớp của bạn sẽ cần phải xử lý, hoặc lấy được từ một số lớp Q khác, cho một số lớp. AFAIK, chỉ QPointer cần lớp của bạn được bắt nguồn từ QObject. Điều đó đã được nói, họ yêu cầu khả năng sử dụng Qt trong dự án của bạn. –

Trả lời

18

Nhiều lớp Qt có nguồn gốc từ QObject, và trong khi một số được xây dựng trong các lớp con trỏ thông minh có liên quan đến QObject (hoặc QSharedData), các QSharedPointerQScopedPointer mẫu xuất hiện để cho phép con trỏ đến bất cứ điều gì.

Ngoài ra, bạn sẽ tìm thấy một số smart pointer templates trong Boost:

  • scoped_ptr - sở hữu duy nhất đơn giản của các đối tượng duy nhất. Không thể sao chép được.
  • scoped_array - Quyền sở hữu duy nhất của mảng. Không thể sao chép được.
  • shared_ptr - Quyền sở hữu đối tượng được chia sẻ giữa nhiều con trỏ.
  • shared_array - Phân chia quyền sở hữu được chia sẻ giữa nhiều con trỏ.
  • weak_ptr - Các nhà quan sát không sở hữu của một đối tượng thuộc sở hữu của shared_ptr.
  • intrusive_ptr - Chia sẻ quyền sở hữu đối tượng với số lượng tham chiếu được nhúng.
+0

Điều này đúng. STL cũng có auto_ptr. Câu hỏi đặt ra là về QT. – alexkr

+1

Hầu như tất cả mọi thứ trong Qt sử dụng QObject làm cơ sở, vì vậy nếu bạn muốn một cái gì đó hoạt động bên ngoài đó, Tăng một nơi để tìm kiếm :) –

+8

Wow, tôi vẫn sử dụng C++ như "C với các lớp" (thats C++ khoảng 1990). Điều đó có hiệu quả, tất cả những con trỏ thông minh không thể đọc được này đều khiến tôi bị bệnh. – Lothar

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