結論:
コンパイラによって自動的に提供される機能を拒否するには、対応するメンバー関数をプライベートとして宣言し、実装しないことができます。
topic1: =delete の使用
利用ルール:
- クラスがデフォルトで生成されたメンバー関数を使用できないようにします。それらを private および =delete に設定することをお勧めします。
- クラスが他のクラスのメンバー関数を使用することを禁止する
シナリオ 1: コンパイラによって生成されたデフォルトのメンバー関数の使用を禁止する
class A
{
public:
A(){
}
~A(){
}
private:
A(const A&) = delete;//拷贝构造函数
A& operator=(const A&) = delete;//赋值运算符
};
シナリオ 2: 他のクラスのメンバー関数の使用を禁止する
class A
{
public:
A(){
}
int fun1(int a) = delete;
};
int main(){
A* temp = new A();
temp->fun2(1); //使用错误
return 0;
}