Tôi đã làm việc trên một cách để ngăn chặn người dùng sử dụng một lớp học mà không có con trỏ thông minh. Vì vậy, buộc họ phải có đối tượng được phân bổ và quản lý bởi con trỏ thông minh. Để có được kết quả như vậy, tôi đã thử như sau: Làm thế nào để ép buộc chỉ trình con trỏ thông minh cho một lớp học?
#include <memory>
class A
{
private :
~A {}
// To force use of A only with std::unique_ptr
friend std::default_delete<A>;
};
Công việc này khá tốt nếu bạn chỉ muốn sử dụng lớp học của bạn là có khả năng thao túng thể hiện của lớp học của bạn thông qua std::unique_ptr
. Nhưng nó không hoạt động cho std::shared_ptr
. Vì vậy, tôi muốn biết nếu bạn có bất kỳ ý tưởng để có được một hành vi như vậy. Giải pháp duy nhất mà tôi đã tìm thấy được làm những điều sau đây (sử dụng friend std::allocator_traits<A>;
là unsufficient):
#include <memory>
class A
{
private :
~A {}
// For std::shared_ptr use with g++
friend __gnu_cxx::new_allocator<A>;
};
Nhưng giải pháp này không phải là cầm tay. Có lẽ tôi đang làm điều đó một cách sai lầm.
Nice giải pháp ... okay, điều này sẽ không làm việc cho STL nhưng tôi luôn luôn muốn điều này cho việc thực hiện SharedPtr của riêng tôi và điều này giải quyết vấn đề của tôi! – mmmmmmmm