我boost:shared_ptr
在我的代码中广泛使用。事实上,在堆上分配的大多数对象都由 a 持有shared_ptr
。不幸的是,这意味着我不能传入this
任何需要shared_ptr
. 考虑这段代码:
void bar(boost::shared_ptr<Foo> pFoo)
{
...
}
void Foo::someFunction()
{
bar(this);
}
这里有两个问题。首先,这不会编译,因为 T* 构造函数shared_ptr
是显式的。其次,如果我强制它构建,bar(boost::shared_ptr<Foo>(this))
我将创建第二个指向我的对象的共享指针,最终将导致双重删除。
这让我想到了我的问题:是否有任何标准模式可以从其中一个对象的方法内部获取您知道存在的现有共享指针的副本?在这里使用侵入式引用计数是我唯一的选择吗?