我有一个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)
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.
| 归档时间: |
|
| 查看次数: |
7254 次 |
| 最近记录: |