c++11 类特殊成员函数生成规则

Posted zkccpro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++11 类特殊成员函数生成规则相关的知识,希望对你有一定的参考价值。

c++11 类特殊成员函数生成规则

对c++实际工程开发时,设计一个类是很常见的操作。可是很多c++初学者往往咬不准编译器自动生成类特殊成员函数的具体规则。(比如说我哈哈哈)这样在自己设计类时,就会和编译器的行为产生冲突,达不到自己预期的设计效果。所以对于c++这样一门语言来说,我们必须彻底弄清楚编译器究竟如何自动生成类的特殊成员函数的?

这里类的特殊成员函数(c++11)包括:构造函数(ctor)、析构函数(dtor)、拷贝构造函数(c-ctor)、重载拷贝赋值运算符(c=)、移动构造函数(m-ctor)、重载移动赋值运算符(m=)。

名称生成条件行为属性备注
ctor设计者没有定义任何构造函数时生成无参构造,所有成员变量默认初始化,不做其他事情public,inline
dtor设计者没有定义析构函数时生成什么也不做,不会自动给你释放指针空间public,inline,noexplicit当父类的析构函数是虚函数时,子类产生的默认析构函数也是虚函数
c-ctor设计者没有定义拷贝构造函数
且 没有定义任何移动操作函数
参数为const T&,浅拷贝所有非静态数据成员public,inline
c=设计者没有定义c=
且 没有定义任何移动操作函数
参数为const T&,返回值T&,浅拷贝所有非静态数据成员public,inline
m-ctor设计者没有定义m-ctor
且 没有定义任何拷贝操作函数、自定义析构函数
参数为T&&,对所有非静态数据成员实施移动操作(浅拷贝后析构传入对象)public,inline
m=设计者没有定义m=
且 没有定义任何拷贝操作函数、自定义析构函数
参数为T&&,返回值T&,对所有非静态数据成员实施移动操作(浅拷贝后析构传入对象)public,inline

c++11后,上述函数都可以通过default来强制编译器为我们生成默认版本的函数。

普适的规则知道了之后,就容易根据自己的需求设计类的特殊成员函数了。

以上是关于c++11 类特殊成员函数生成规则的主要内容,如果未能解决你的问题,请参考以下文章

C++知识分享:C++类特殊成员函数

在没有任何构造函数的类的情况下,在 C++11 中自动生成类成员函数

C++11 虚拟析构函数和移动特殊函数的自动生成

[C++11 类的改进] --- 继承控制:=default和=delete

C++11 ——— 类的新功能

C++11 ——— 类的新功能