在C++中,=default
和=delete
是两个特殊的成员函数声明符号,用于显式地声明成员函数的行为。下面我将分别举例详细说明它们的作用:
-
=default
: 当你想要告诉编译器使用默认的特殊成员函数实现时,你可以使用=default
。这个特性通常用于默认构造函数、拷贝构造函数、拷贝赋值运算符和析构函数。它告诉编译器生成默认的实现,而不需要程序员手动编写。class MyClass { public: MyClass() = default; // 默认构造函数 MyClass(const MyClass&) = default; // 拷贝构造函数 MyClass& operator=(const MyClass&) = default; // 拷贝赋值运算符 ~MyClass() = default; // 析构函数 };
-
在上面的例子中,
=default
告诉编译器生成默认的构造函数、拷贝构造函数、拷贝赋值运算符和析构函数的实现。这在某些情况下特别有用,比如当类的成员都可以使用默认初始化或拷贝时,你不需要手动编写这些函数。 -
=delete
: 当你想要阻止某个特殊成员函数的调用时,你可以使用=delete
。这个特性通常用于阻止默认构造函数、拷贝构造函数、拷贝赋值运算符和析构函数的调用。class NonCopyable { public: NonCopyable() = default; // 默认构造函数 NonCopyable(const NonCopyable&) = delete; // 禁用拷贝构造函数 NonCopyable& operator=(const NonCopyable&) = delete; // 禁用拷贝赋值运算符 ~NonCopyable() = default; // 默认析构函数 };
-
在上面的例子中,我们定义了一个
NonCopyable
类,通过=delete
禁用了拷贝构造函数和拷贝赋值运算符,这样可以确保该类对象不能被拷贝。如果尝试使用被删除的函数,编译器会报错,从而防止了意外的行为发生。
总而言之,=default
和=delete
这两个特殊成员函数声明符号可以让程序员更加灵活地控制类的行为,使代码更加清晰和安全。