繁体   English   中英

在unique_ptr C ++中的release()

[英]release() in unique_ptr C++

我已经使用unique_ptr几天了,我对unique_ptr的发布方法有疑问。 我知道发行版会返回“指向托管对象的指针,如果没有托管对象 ,则返回nullptr

可以说我们有三个unique_ptr变量:

unique_ptr< Node > left(Node);
unique_ptr< Node > right(Node);
unique_ptr< Node > middle(Node);

现在,我想更改其中的指针:

middle.release();
right.release();
left.release();

middle.reset(right.get());
right.reset(left.get());
left.reset(middle.get());

这会导致内存泄漏吗? 最好是存储由release()返回的值,然后使用它们,还是这样很好?

根据cppreference.com, release()执行以下操作:

释放托管对象的所有权(如果有)。 调用之后,get()返回nullptr。

因此,释放所有对象后,您将失去指针! 而且由于它们是由unique_ptr -s 拥有的,所以现在变得疯狂了!

相反,请使用swap仔细实现相同的目标:

right.swap(middle); // middle = right, right = middle
right.swap(left); // left = right = (old) middle, right = left

你漏了! release使指针无效。 您会丢失原始的对象指针。

只需交换两次即可完成所需的操作:

middle.swap(right);
right.swap(left);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM