当前位置:  开发笔记 > 编程语言 > 正文

如果我返回unique_ptr,原始对象是否会被删除?

如何解决《如果我返回unique_ptr,原始对象是否会被删除?》经验,为你挑选了1个好方法。

我想做这样的事情:

unique_ptr MyFunc() {
  MyObj* ptr = new MyObj();
  ...
  return unique_ptr(ptr);
}

unique_ptr value = MyFunc();

但是我不确定在函数返回后临时值被破坏时是否会删除该对象.如果是这样,我应该如何正确实现一个返回unique_ptr?的函数?



1> SergeyA..:

不,当函数范围结束时,不会删除该对象.这是因为移动构造函数unique_ptr会将所有权语义"移动"到新unique_ptr对象,而旧的销毁unique_ptr将不会导致删除已分配的对象.

注意:这不是正确的方法.如果在内存分配和unique_ptr<>创建之间抛出异常,则会发生内存泄漏.


关于异常安全的注释很好
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有