我已经在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()返回的值然后使用它们,还是这样很好?

最佳答案

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

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

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

关于c++ - 在unique_ptr C++中的release(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46872819/

10-11 23:00
查看更多