unique_ptr在未被引用时是否会自动销毁?

时间:2016-10-05 23:37:29

标签: c++

与Java中的GC概念类似,当一个对象不再被其他东西引用时,它会被标记为GC。

unique_ptr的工作原理与此类似吗?

如果说我有一个包含左/右std::unique_ptr<BSTNode>节点的数据结构(树)。假设我有一个删除函数remove(std::unique_ptr<BSTNode>& root, int val),如果我转到包含BSTNode的{​​{1}}的父级,并将nullptr分配给左侧或右侧子字段(val包含std::unique_ptr<BSTNode>),智能指针会自毁吗?

或者我应该val删除功能中的智能指针吗?这个问题主要是我不理解的范围问题。

2 个答案:

答案 0 :(得分:2)

  

如果我转到包含val的BSTNode的父级,并将nullptr分配给左子场或右子场(这是包含val的std :: unique_ptr),智能指针会自毁吗?

智能指针会破坏指向的东西。

它不会破坏它自己(这就是自毁意味着什么;你可能在这里混淆了术语)。

答案 1 :(得分:0)

unique_ptr的关键是了解 stack 变量的寿命。

unique_ptr的内在特性与其他堆栈变量没有什么不同,只是使用其析构函数来清理拥有的内容。这是在这些指针之前广泛使用的习惯用法,称为RAII 资源获取是初始化

如果堆栈上有unique_ptr,即:在某个范围内声明,则在退出该范围时将执行其析构函数,并删除堆栈变量。

如果将其放在分配给堆的某些结构或类中,则在删除该容器时,它将执行其析构函数。