boost::shared_ptr
是否解决了原始指针问题?
Base* p = new Base();
shared_ptr <Base> sp(p);
shared_ptr <Base> sq(p);
两个shared_ptr
的ref都计为1,因此原始指针就是问题。
boost::shared_ptr
是否也有此问题?
我听说boost::shared_ptr
没有问题那么它是如何解决的?
答案 0 :(得分:2)
不,boost::shared_ptr
无法解决此问题。
问题在于您的代码,因此您需要自己解决。
最佳解决方案是确保在使用new
创建对象时始终初始化智能指针 :
shared_ptr <Base> sp(new Base());
现在没有原始指针,所以没问题。
更好:
shared_ptr<Base> sp = make_shared<Base>();
答案 1 :(得分:0)
shared_ptr
。
提供的是shared_from_this构造。你继承了一个基类,它可以找到shared_ptr引用(并在你第一次采用指针时设置它)。然后,您可以从原始指针获取新的共享:
p->shared_from_this();
如果你打电话给那个虽然已经很好的东西已经被共享指针采用了,或者它会做出非常可怕的事情并在所有令人尴尬的地方触碰你。通过必须被调用而不是构造函数的create
函数来强制执行它是很好的。这样就可以确保没有人创建一个不在shared_ptr
中并且调用该函数的人。
我努力避免使用这种结构。如果您确定您的类型必须在共享所有权构造中,那么只需使用侵入式指针即可。对原始指针有困难的侵入式指针将是一件非常愚蠢的事情......我不知道有哪一个。您的代码可以使用它们。