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
Trả lời
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 QSharedPointer và QScopedPointer 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.
Điều này đúng. STL cũng có auto_ptr. Câu hỏi đặt ra là về QT. – alexkr
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 :) –
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
- 1. Con trỏ & phá hủy thông minh
- 2. OpenCV hoặc Boost con trỏ thông minh
- 3. C++ Hiệu suất con trỏ thông minh
- 4. Con trỏ thông minh và tham khảo
- 5. Sự khác biệt giữa các con trỏ thông minh Boost và con trỏ thông minh tiêu chuẩn là gì?
- 6. Con trỏ thông minh và đếm số liệu trong Java
- 7. pimpl-idiom trong mẫu; con trỏ thông minh nào?
- 8. khởi động đúng cách thông minh con trỏ mảng
- 9. thành ngữ hàm tạo ảo với con trỏ thông minh
- 10. Con trỏ thông minh và xử lý ngoại lệ
- 11. C++ 11 con trỏ thông minh và đa hình
- 12. sử dụng mem_fun() cho vùng chứa con trỏ thông minh
- 13. Khi nào tôi nên sử dụng con trỏ thô trên con trỏ thông minh?
- 14. thúc đẩy con trỏ thông minh và BOOST_NO_MEMBER_TEMPLATES
- 15. Quy tắc ba với con trỏ thông minh?
- 16. Tôi có thể viết một hàm C++ chấp nhận cả một con trỏ thô và một con trỏ thông minh?
- 17. trả về một 'con trỏ' được yêu cầu phải được giữ bởi một con trỏ thông minh
- 18. Truyền con trỏ thông minh làm đối số bên trong một lớp: scoped_ptr hoặc shared_ptr?
- 19. Sử dụng con trỏ thông minh trong cấu trúc hoặc lớp
- 20. Cách tốt nhất để triển khai con trỏ thông minh trong C++ là gì?
- 21. Có thể sử dụng một con trỏ thông minh C++ cùng với malloc của C không?
- 22. Con trỏ thông minh/quản lý bộ nhớ an toàn cho C?
- 23. Hình phạt gói con trỏ thông minh. Bản ghi nhớ với std :: map
- 24. Tìm rò rỉ bộ nhớ do con trỏ thông minh gây ra
- 25. Làm thế nào để ép buộc chỉ trình con trỏ thông minh cho một lớp học?
- 26. Tại sao bạn không nên sử dụng tham chiếu đến con trỏ thông minh?
- 27. Thay đổi con trỏ thành đồng hồ cát/con trỏ đợi/bận và quay lại trong Qt
- 28. con trỏ làm thông số mẫu?
- 29. Mẫu "con trỏ thông minh" C++ tự động chuyển đổi thành con trỏ trần nhưng không thể xóa một cách rõ ràng
- 30. Làm cách nào để tạo một con trỏ thông minh có thể khóa và mở một mutex?
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. –