Tôi đang sử dụng rộng rãi boost:shared_ptr
mã của mình. Trên thực tế, hầu hết các đối tượng được phân bổ trên heap được tổ chức bởi a shared_ptr
. Thật không may, điều này có nghĩa là tôi không thể chuyển this
vào bất kỳ hàm nào có a shared_ptr
. Hãy xem xét mã này:
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ó phải xây dựng với bar(boost::shared_ptr<Foo>(this))
tôi, tôi sẽ tạo một con trỏ chia sẻ thứ hai đến đối tượng của tôi, điều này cuối cùng sẽ dẫn đến xóa hai lần.
Điều này đưa tôi đến câu hỏi của mình: Có bất kỳ mẫu chuẩn nào để nhận bản sao của con trỏ dùng chung hiện có mà bạn biết tồn tại từ bên trong một phương thức trên một trong những đối tượng đó không? Sử dụng tham chiếu xâm nhập có tính là lựa chọn duy nhất của tôi ở đây không?