- 无参构造函数:创建类对象
- 拷贝构造函数:拷贝类对象
*即拷贝另一个对象给该对象,如string str1(str2)
定义方法
类名(const 类名 & c)* - 移动构造函数:拷贝类对象
*对于原对象,拷贝构造之后还拥有资源,移动构造之后不再拥有资源
Mystring(Mystring&& other);* - 拷贝赋值函数:类对象赋值
- 移动赋值函数:类对象赋值
析构函数:销毁类对象
在 C++ 语法规则中,一旦程序员实现了这些函数的自定义版本,则编译器不会再为该类自动生成默认版本。
有时程序员会忘记上面提到的规则,最常见的是声明了带参数的构造,如果还需要无参构造函数,这时候必须定义出不带参数的版本。
使用 =defaut 指定的默认函数和类提供的默认函数是等价的
弃置函数:=delete
使这个函数无法调用,比如不想让别人使用拷贝构造
请注意,删除的函数是隐式内联的,这一点非常重要。删除的函数定义必须是函数的首次声明。
class C {
public:
C(C& a) = delete;
};
但是以下尝试声明删除函数的方法会产生错误:// incorrect syntax of declaring a member function as deleted
class C {
public:
C();
};
// Error, the deleted definition of function C must be the first declaration of the function.
C::C() = delete;