boost :: shared_ptr引用计数确实解决了tr1 :: shared_ptr的原始指针

时间:2014-10-14 09:27:42

标签: c++ boost smart-pointers

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没有问题那么它是如何解决的?

2 个答案:

答案 0 :(得分:2)

不,boost::shared_ptr无法解决此问题。

问题在于您的代码,因此您需要自己解决。

最佳解决方案是确保在使用new创建对象时始终初始化智能指针

shared_ptr <Base> sp(new Base());

现在没有原始指针,所以没问题。

更好:

shared_ptr<Base> sp = make_shared<Base>();

答案 1 :(得分:0)

你听错了。这肯定不适用于boost或std shared_ptr

提供的是shared_from_this构造。你继承了一个基类,它可以找到shared_ptr引用(并在你第一次采用指针时设置它)。然后,您可以从原始指针获取新的共享:

p->shared_from_this();

如果你打电话给那个虽然已经很好的东西已经被共享指针采用了,或者它会做出非常可怕的事情并在所有令人尴尬的地方触碰你。通过必须被调用而不是构造函数的create函数来强制执行它是很好的。这样就可以确保没有人创建一个不在shared_ptr中并且调用该函数的人。

我努力避免使用这种结构。如果您确定您的类型必须在共享所有权构造中,那么只需使用侵入式指针即可。对原始指针有困难的侵入式指针将是一件非常愚蠢的事情......我不知道有哪一个。您的代码可以使用它们。