我正在使用 C++ 中的智能指针,使用
shared_ptr
和 unique_ptr
和 weak_ptr
。假设我有一个在多个所有者之间共享的 shared_ptr
,但我有一组消费者想要使用该指针,但不承担它的所有权。
我假设,我可以使用像这样的
weak_ptr
:
class control_base {
std::weak_ptr<control_base> parent;
std::vector<std::shared_ptr<control_base>> children;
control_base( const std::shared_ptr<control_base> & _parent ) : parent(_parent)
{
}
};
class page {
std::shared_ptr<control_base> root;
};
在上面的示例中,
control_base
节点将通过子成员被引用为shared_ptr
。该节点有对父节点的引用,这是弱的。这避免了循环释放问题,并且弱锁可以防止父级在子级之前被释放。如果我分配或删除根,或者坦率地说,树中的一个元素,则该节点的所有子节点都将被释放。
这个解释正确吗?
尽管您的示例仅使用原始指针就足够了,但您的解释是完全正确的。当父节点解构时,子节点也会解构。成功锁定父弱指针(从中获取非空的shared_ptr)将推迟该父指针的释放,只要您持有返回的shared_ptr。 :D