gpt4 book ai didi

c++ - bind shared_from_this 内存不会被释放

转载 作者:行者123 更新时间:2023-11-30 04:04:14 24 4
gpt4 key购买 nike

#include <iostream>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/enable_shared_from_this.hpp>

class A: public boost::enable_shared_from_this<A>
{
typedef boost::function<int()> GET;
public:
A()
{
std::cout << "A::A() " << this << std::endl;
}
~A()
{
std::cout << "A::~A()" << this <<std::endl;
}

void set()
{
myget=boost::bind(&A::get, shared_from_this());
}

问题来了:当我用shared_from_this()绑定(bind)它时,它不会被释放。但是,如果我将它与 this (boost::bind(&A::get, this)) 绑定(bind),该实例将被释放。

    int getI()
{
myget();
}
inline int get()
{
return 1;
}
private:
GET myget;
};

void test()
{
boost::shared_ptr<A> a(new A);
a->set();
a->getI();
}

int main()
{
test();
return 0;
}

我的问题是:为什么即使程序已经关闭,A 的实例也永远不会释放?

最佳答案

问题是 myget 变量阻止析构函数运行。

所以你甚至做不到

~A() { 
std::cout << "A::~A()" << this << std::endl;
myget = {};
}

这就是发明弱指针的目的。但是在这种特殊情况下,您可以简单地使用 this 因为在 A

的生命周期之后无法访问 myget

关于c++ - bind shared_from_this 内存不会被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23867702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com