跳到主要内容

简述C++如何禁止自动生成拷贝构造函数 ?

参考答案:

在C++中,如果你不希望编译器自动为你生成拷贝构造函数,你可以通过在你的类定义中显式地声明一个拷贝构造函数并将其设为delete来实现。

这是一个简单的示例:

class MyClass {
public:
    MyClass(const MyClass&) = delete;  // 禁止拷贝构造函数
    
    // ... 其他成员函数和数据成员 ...
};

在这个例子中,我们声明了一个拷贝构造函数,但紧接着用= delete告诉编译器我们不希望它实现这个构造函数。因此,任何尝试创建MyClass对象的拷贝的操作都会导致编译错误。

同样,你也可以禁止移动构造函数和拷贝赋值运算符、移动赋值运算符等,方法类似。例如:

class MyClass {
public:
    MyClass(const MyClass&) = delete;  // 禁止拷贝构造函数
    MyClass(MyClass&&) = delete;  // 禁止移动构造函数
    MyClass& operator=(const MyClass&) = delete;  // 禁止拷贝赋值运算符
    MyClass& operator=(MyClass&&) = delete;  // 禁止移动赋值运算符

    // ... 其他成员函数和数据成员 ...
};

请注意,禁用拷贝构造函数和拷贝赋值运算符通常意味着你的类不能被复制,这可能会对你的类的使用方式产生重要影响。因此,在做出这样的决定之前,你应该确保这是你所需要的,并且你的类设计能够处理这种限制。