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