【发布时间】:2016-10-23 22:14:17
【问题描述】:
假设有一个对象 A 通过std::unique_ptr<B> 拥有一个对象 B。此外,B 持有对 A 的原始指针(弱)引用。然后 A 的析构函数将调用 B 的析构函数,因为它拥有它。
在 B 的析构函数中访问 A 的安全方法是什么? (因为我们也可能在 A 的析构函数中)。
在 A 的析构函数中显式重置对 B 的强引用是一种安全的方法,以便 B 以可预测的方式被销毁,但一般的最佳实践是什么?
【问题讨论】:
-
为什么需要从B的析构函数中访问A?
-
请澄清您所说的“拥有一个对象 B”是什么意思?它通过智能指针拥有它?
-
是的,A 有一个 std::unique_ptr。
-
它不是循环引用。 A拥有B,B不拥有A。
-
@OlzhasZhumabek
shared_ptr无济于事,它的析构函数仍将被调用 2 次:A destructor->B destructor->shared_ptr(to A) destructor->A destructor->B destructor->shared_ptr destructor= 双析构函数 = 未定义行为,你不是说weak_ptr
标签: c++ smart-pointers ownership-semantics