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++11 中自动生成类成员函数