shared_ptr改成unique_ptr导致编译不过

如果一个类的属性包括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;
}

 

Add a Comment

电子邮件地址不会被公开。

4 × 4 =