我有两个类A和B,它们有一个指向彼此的shared_ptr(A有一个shared_ptr到B,B有一个shared_ptr到A)。
我试图在退出范围时调用两个类的析构函数,但它不起作用。没有析构函数被调用。
以下是一个示例代码:
{{1}}
我该如何解决这个问题?
答案 0 :(得分:6)
智能指针管理的对象只有在对象的最后一个引用超出范围时才会被销毁,最后一个剩余的共享指针负责delete
和销毁对象。< / p>
您的代码设置了一个循环引用:一对使用智能指针指向彼此的对象。因此,总有一个智能指针会引用另一个对象,每个对象的共享指针都会阻止另一个对象被破坏。
在此循环引用被破坏之前,这些对象不会被破坏。