【发布时间】:2016-05-31 10:38:30
【问题描述】:
我有两个类,A 和 B,它们有一个 shared_ptr 指向彼此(A 有一个指向 B 的 shared_ptr,B 有一个指向 A 的 shared_ptr)。
我试图在超出范围时调用这两个类的析构函数,但它不起作用。没有调用析构函数。
这是一个示例代码:
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的用途
标签: c++ shared-ptr circular-reference