C言語におけるdeletedの役割は何ですか?
C言語では、deletedは特別な識別子であり、メンバー関数やデストラクタが明示的に削除されたことを示すために使用されます。deletedとマークされた関数は呼び出しやアクセスができません。
削除の役割には次のような点があります:
- 削除された関数をマークすることで、その関数が誤って呼び出されることを防ぐことができます。これにより、潜在的なランタイムエラーを回避することができます。
- デフォルト関数の明示的な禁止:デフォルトのコピー、ムーブコンストラクタ、コピー代入演算子、ムーブ代入
- deletedのマークされた関数が呼び出されるかアクセスされる際に、コンパイラーは適切なエラーメッセージを表示します。これにより、開発者は問題をより早く発見し修正することができます。
以下はいくつかの使用例です。
class MyClass {
public:
// 禁用默认的拷贝构造函数和拷贝赋值运算符
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
// 禁用默认的移动构造函数和移动赋值运算符
MyClass(MyClass&&) = delete;
MyClass& operator=(MyClass&&) = delete;
};
int main() {
MyClass obj1;
MyClass obj2(obj1); // 编译错误,拷贝构造函数被禁用
MyClass obj3;
obj1 = obj3; // 编译错误,拷贝赋值运算符被禁用
return 0;
}
上記の例では、コピーコンストラクタとコピー代入演算子を削除マークとして示すことで、これらのデフォルト関数の使用を禁止し、オブジェクトのコピー操作を回避しています。