1. 无参构造函数:创建类对象 2. 拷贝构造函数:拷贝类对象 *即拷贝另一个对象给该对象,如string str1(str2) 定义方法 类名(const 类名 & c)* 3. 移动构造函数:拷贝类对象 *对于原对象,拷贝构造之后还拥有资源,移动构造之后不再拥有资源 Mystring(Mystring&& other);* 4. 拷贝赋值函数:类对象赋值 5. 移动赋值函数:类对象赋值 析构函数:销毁类对象 在 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; ``` Loading... 1. 无参构造函数:创建类对象 2. 拷贝构造函数:拷贝类对象 *即拷贝另一个对象给该对象,如string str1(str2) 定义方法 类名(const 类名 & c)* 3. 移动构造函数:拷贝类对象 *对于原对象,拷贝构造之后还拥有资源,移动构造之后不再拥有资源 Mystring(Mystring&& other);* 4. 拷贝赋值函数:类对象赋值 5. 移动赋值函数:类对象赋值 析构函数:销毁类对象 在 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; ``` Last modification:March 23, 2023 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏