我有一个 get
函数,它返回一个名为 myObject
的 MyClass
类型的对象:
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/