2
我有两个类A和B,它们有一个指向彼此的shared_ptr(A有一个shared_ptr到B,B有一个到A的shared_ptr)。来自互斥递归类的析构函数与shared_from_this不叫
我试图让两个类的析构函数在超出范围时调用,但它不起作用。没有析构函数被调用。
下面是一个例子代码:
class B;
class A
{
public:
A() { std::cout << "Constructor A" << std::endl; }
~A() { std::cout << "Destructor A" << std::endl; }
std::shared_ptr<B> b;
};
class B
{
public:
B() { std::cout << "Constructor B" << std::endl; }
~B() { std::cout << "Destructor B" << std::endl; }
std::shared_ptr<A> a;
};
int main()
{
std::shared_ptr<A> a = std::make_shared<A>();
a->b = std::make_shared<B>();
a->b->a = a;
}
我怎么能解决这个问题?
听起来像对我的预期行为,他们永远不会超出范围,因为他们永远相互引用。 –
这就是'weak_ptr'的用途 – BeyelerStudios