访问此指针的shared_ptr

Accessing shared_ptr for this pointer

本文关键字:ptr shared 指针 访问      更新时间:2023-10-16

有没有办法为此访问shared_ptr:

例如

#include <boost/enable_shared_from_this.hpp>
#include <boost/shared_ptr.hpp>
#include <cassert>
class Y: public boost::enable_shared_from_this<Y>
{
public:
    void foo();
    void bar();
    boost::shared_ptr<Y> f()
    {
        return shared_from_this();
    }
};
void Y::foo() 
{
   boost::shared_ptr<Y> p(this);
   boost::shared_ptr<Y> q = p->f();
   q->bar();
   p.reset();
   q.reset();
}
void Y::bar()
{
   std::cout << __func__ << std::endl;
}
int main()
{
   Y y;
   y.foo();
}

当我运行程序时,我在执行酒吧后得到一个 segafult。我确实理解赛格错误的原因。

我的最终目标是有一个弱指针,然后回调。

谢谢

y 的生存期要么由共享指针管理,要么在创建它的堆栈帧终止时超出范围。下定决心并坚持下去。

如果这段代码可以以某种方式工作,它将破坏y两次,一次是在main结束时超出范围时,一次是在最后一个shared_ptr消失时。

也许你想要:

int main()
{
   std::shared_ptr<Y> y = std::make_shared<Y>();
   y->foo();
}

在这里,当实例的最后一个shared_ptr消失时,实例将被销毁。这可能发生在main结束时,但是如果foo蠕动掉shared_ptr的副本,它可以延长对象的寿命。它可以清除一个弱指针,并可能在全局对象的析构函数中告诉对象已消失。

弱指针的要点是能够将其提升为强指针,从而延长对象的生存期。如果无法动态管理对象的生存期,这将不起作用。