如果一个类的属性包括unique_ptr,那么它的默认拷贝构造函数就是delete了的,需要手动写,具体是把这个unique_ptr拷贝还是std::move是可以根据使用情况决定的。
如下代码,拷贝和move方案是可以二选一的,需要注意的是,如果使用move,传入参数就不能是const了。
class A
{
public:
std::unique_ptr<int> item;
A(int i):item(std::make_unique<int>(i)){}
A(const A& right):item(std::make_unique<int>(*(right.item))){} // 拷贝
A(A& right){item = std::move(right.item);} // move
};
int main()
{
A a(3);
A b = a;
std::cout << *(b.item) << std::endl;
}