boost::shared_ptr引用计数所做的是求解tr1::shared_pt的原始指针

boost::shared_ptr reference counting does is solve raw pointer of tr1::shared_ptr

本文关键字:shared tr1 原始 指针 pt 引用 ptr boost      更新时间:2023-10-16

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中的函数并调用该函数。

我真的很努力地避免不得不使用这种结构。如果你非常确定你的类型必须在共享所有权结构中,那么就让它使用侵入式指针。一个有原始指针问题的侵入式指针将是一件非常愚蠢的事情。。。我不知道有哪个能。你的代码可以和他们一起工作。