我想将原始指针成员换成某个智能指针,以防止在开发类中删除。指针下的对象的所有者在类之外。所以,看起来像boost::shared_ptr
和std::auto_ptr
不适合。以下是一个简化示例:从原始指针创建weak_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
的正确方法是什么?
可能重复转换](http://stackoverflow.com/questions/17522020/shared-ptr-weak-ptr-conversions) –
如果你想防止删除你的类中的那个指针,那么不要对它调用'delete',并且不提供将指针公开给客户端的访问器函数。 'weak_ptr'意味着拥有'shared_ptr'的对象的非拥有视图。如果你能以某种方式将指针填充到'weak_ptr'中,它不知道指针是否过期,也不会阻止我在类中调用'delete m_bar.lock()。get();'。你永远无法使所有事情都百分之百白痴。 – Praetorian