有没有代表终端指针的C++智能指针?

问题描述 投票:0回答:1

我正在使用 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
。该节点有对父节点的引用,这是弱的。这避免了循环释放问题,并且弱锁可以防止父级在子级之前被释放。如果我分配或删除根,或者坦率地说,树中的一个元素,则该节点的所有子节点都将被释放。

这个解释正确吗?

c++ smart-pointers
1个回答
0
投票

尽管您的示例仅使用原始指针就足够了,但您的解释是完全正确的。当父节点解构时,子节点也会解构。成功锁定父弱指针(从中获取非空的shared_ptr)将推迟该父指针的释放,只要您持有返回的shared_ptr。 :D

© www.soinside.com 2019 - 2024. All rights reserved.