[英]Differences between tr1::shared_ptr and boost::shared_ptr?
[英]boost::shared_ptr reference counting does is solve raw pointer of tr1::shared_ptr
boost::shared_ptr
是否boost::shared_ptr
解决原始指针问题?
Base* p = new Base();
shared_ptr <Base> sp(p);
shared_ptr <Base> sq(p);
两个shared_ptr
的引用计数均为1,因此发出了原始指针。
boost::shared_ptr
也有这个问题吗?
我听说boost::shared_ptr
没有问题,那它怎么解决呢?
不, boost::shared_ptr
无法解决此问题。
问题出在您的代码中,因此您需要自己解决。
最好的解决方案是确保在使用new
创建对象时始终始终 立即初始化智能指针:
shared_ptr <Base> sp(new Base());
现在没有原始指针,因此没有问题。
更好的是:
shared_ptr<Base> sp = make_shared<Base>();
你听错了 这绝对不能与boost或std shared_ptr
。
提供的是shared_from_this构造。 您从基类继承,该基类做了一些魔术来找到shared_ptr引用(并在您首次采用指针时进行设置)。 然后,您可以从原始指针获取新的共享:
p->shared_from_this();
如果您称此事虽然很好,但已经被一个共享指针所采用,否则它将做得非常可怕,并在所有令人尴尬的地方与您接触。 通过create
函数(必须调用该函数而不是构造函数)来强制执行此操作很有意义。 然后,这可以确保没有人创建不在shared_ptr
并调用该函数。
我尽力避免不得不使用此构造。 如果您如此胆怯地确定您的类型必须位于共享所有权结构中,则只需使其使用介入式指针即可。 一个对原始指针有麻烦的侵入式指针将是一件很愚蠢的事……我不知道那样做。 您的代码将与他们一起工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.