繁体   English   中英

boost :: shared_ptr参考计数是解决tr1 :: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM