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