Tôi đang sử dụng rộng rãi boost:shared_ptr
trong mã của tôi. Trong thực tế, hầu hết các đối tượng được cấp phát trên heap được giữ bởi shared_ptr
. Thật không may điều này có nghĩa là tôi không thể vượt qua this
vào bất kỳ chức năng nào có số shared_ptr
. Hãy xem xét mã này:Nhận tăng giá :: shared_ptr cho số
void bar(boost::shared_ptr<Foo> pFoo)
{
...
}
void Foo::someFunction()
{
bar(this);
}
Có hai vấn đề ở đây. Đầu tiên, điều này sẽ không biên dịch vì hàm tạo T * cho shared_ptr
là rõ ràng. Thứ hai, nếu tôi buộc nó để xây dựng với bar(boost::shared_ptr<Foo>(this))
Tôi sẽ tạo ra một con trỏ chia sẻ thứ hai cho đối tượng của tôi mà cuối cùng sẽ dẫn đến một đôi-xóa.
Điều này mang lại cho tôi câu hỏi của tôi: Có bất kỳ mẫu chuẩn nào để nhận bản sao con trỏ chia sẻ hiện có mà bạn biết tồn tại từ bên trong phương thức trên một trong các đối tượng đó không? Sử dụng tham chiếu xâm nhập có tính vào tùy chọn duy nhất của tôi ở đây không?
"_Is sử dụng tài liệu tham khảo xâm nhập đếm lựa chọn duy nhất của tôi ở đây _ "Có gì sai với tùy chọn này? – curiousguy
Có thể không có gì. Phụ thuộc vào hoàn cảnh của bạn. Nó làm cho các đối tượng của bạn lớn hơn và có thể không hoạt động ở những nơi mà bạn không có quyền kiểm soát các lớp mà bạn đang giữ các trình thông minh. –
enabe_shared_from_this giờ đây nằm trong 'std ::'. Hãy xem câu trả lời của tôi. –