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

use*_*398 4 c++ unique-ptr

我有一个get函数,它返回一个MyClass名为的对象myObject:

MyClass myObject = something.get(id);
Run Code Online (Sandbox Code Playgroud)

我想将myObject转换为myObject,怎么做?

std::unique_ptr<MyClass>(&myObject); // Is this correct?
Run Code Online (Sandbox Code Playgroud)

geo*_*ptr 7

MyClass myObject = something.get(id);
Run Code Online (Sandbox Code Playgroud)

意味着复制或移动构造.

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

std::unique_ptr<MyClass> my_p_obj( new MyClass(myObject) );
Run Code Online (Sandbox Code Playgroud)

在哪里创建新对象并通过复制进行初始化.

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

std::unique_ptr<MyClass> my_p_obj( new MyClass( std::move(myObject) ) );
Run Code Online (Sandbox Code Playgroud)

std :: unique_ptr(&myObject)有什么问题;

myObject是本地范围内的一个对象,当它所在的函数到达end(})时将被销毁.如果两次调用析构函数(一个来自编译器,第二个来自unique_ptr),则会得到未定义的行为

编辑:在评论中清除,你可以利用auto my_p_obj = std::make_unique<MyClass>(myObject)哪个做同样的事情.- 谢谢,Andreas H.

  • 或者您可以使用`auto my_p_obj = std :: make_unique &lt;MyClass&gt;(myObject)`,它与`std :: unique_ptr &lt;MyClass&gt; my_p_obj(new MyClass(myObject))基本上具有相同的作用。 (2认同)