c++如何将已创建的对象转换为unique_ptr

标签 c++ unique-ptr

我有一个 get 函数,它返回一个名为 myObjectMyClass 类型的对象:

MyClass myObject = something.get(id);

我想把myObject转换成unique_ptr,怎么办?

std::unique_ptr<MyClass>(&myObject); // Is this correct?

最佳答案

MyClass myObject = something.get(id);

暗示复制或移动构造。

如果您的复制构造函数已定义并声明为公共(public),请尝试以下操作

std::unique_ptr<MyClass> my_p_obj( new MyClass(myObject) );

创建新对象并通过复制对其进行初始化的位置。

否则,您示例中的对象将通过移动构造进行初始化

std::unique_ptr<MyClass> my_p_obj( new MyClass( std::move(myObject) ) );

what's wrong with std::unique_ptr(&myObject);

myObject是局部作用域中的一个对象,当它所在的函数到达末尾( } )时将被销毁。如果你两次调用析构函数(一次来自编译器,第二次来自 unique_ptr )你会得到未定义的行为

编辑:如评论中所述,您可以使用 auto my_p_obj = std::make_unique<MyClass>(myObject)它做同样的事情。 – 谢谢,Andreas H.

关于c++如何将已创建的对象转换为unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37180818/

相关文章:

c++ - 在 C++ 中移动 unique_ptr

c# - 在 Linux 上使用 CoreCLR 从 C++ 调用 C# 方法

c++ - 如何按顺序打印出二叉树?

c++ - 用空格拆分字符串会导致字符串损坏

c++ - std::unique_ptr 的推荐用法

c++ - vector 容器和 unique_ptr

c++ - 支持函数转换为引用类型、标准中的漏洞或编译器错误?

c++ - 执行 C++ CUDA 内核时黑屏,输出正确结果

c++ - 我是否总是必须使用 unique_ptr 来表达所有权?

c++ - unique_ptr vector 的迭代器的访问成员