我对unique_ptr还是个新手,我在我的一些代码中使用过它。当我尝试使用unique_ptr时,我有下面的代码似乎不起作用,有人能解释一下为什么吗?
#include <vector>
#include <deque>
#include <memory>
class MyClass {
public:
MyClass(int x) {
myDeque.push_back(std::unique_ptr<int>(new int(x)));
}
private:
std::deque<std::unique_ptr<int>> myDeque;
};
int main() {
std::vector<MyClass> myVector;
myVector.push_back(MyClass(5));
}
我希望在一个类中有一个unique_ptr的deque,并从另一个函数填充它,我还需要有一个MyClass的类对象的向量。当我使myDeque全局时,代码工作,但当它是一个成员变量时,会抛出错误。
1条答案
按热度按时间pw9qyyiw1#
如果MyClass有
move only
成员(像unique_ptr
),整个类可以是move only
。为了实现它,删除复制构造函数和赋值运算符,并定义移动构造函数和赋值运算符。如果将
lvalue
推送到vector
,请记住使用std::move
如果你想创建MyClass的副本,定义适当的复制构造函数和复制赋值运算符,其中你不试图复制unique_ptr,而只是它的解引用值: