【发布时间】:2013-10-09 00:41:25
【问题描述】:
我想将原始指针成员包装到某个智能指针,以防止在开发类中删除。指针下对象的所有者在类之外。所以,看起来 boost::shared_ptr 和 std::auto_ptr 不适合。下面是一个简化的例子:
class Foo {
boost::weak_ptr<Bar> m_bar;
public:
void setBar(const Bar *bar) { // bar created on heap
m_bar = bar; // naturally compilation error
}
};
当然会导致编译错误。从原始指针(如果存在)初始化weak_ptr 的正确方法是什么?
【问题讨论】:
-
如果你想防止在你的类中删除那个指针,那么不要在它上面调用
delete,也不要提供将指针暴露给客户端的访问器函数。weak_ptr用于查看shared_ptr拥有的对象的非拥有视图。如果您能够以某种方式将该指针填充到weak_ptr中,它将不知道指针是否已过期,也不会阻止我在您的班级中调用delete m_bar.lock().get();。你永远不可能让所有东西都 100% 防傻。
标签: c++ pointers boost weak-ptr