2

不允许复制的事实unique_ptr意味着不超过一个对象可以共享相同的底层数据。如果我在我的类中包含一个对象,unique_ptr编译器是否足够明智地使隐式复制构造函数成为已删除的函数?

class Blob {
    public:
        Blob(){}
    //  Blob(const Blob& rhs){}
        unique_ptr<int> upi{make_unique<int>(0)};
};

int main(int argc, char* argv[]) {

    Blob b;
    cout << *b.upi << endl;

    Blob b2(b); // error: Error C2280   'Blob::Blob(const Blob &)': attempting to reference a deleted function

}

如果我取消注释用户定义的复制构造函数的定义,那么只要没有复制unique_ptr那里就一切正常。

4

0 回答 0