隐式声明了特殊成员函数

Who*_*ami 2 c++

从根本上隐含地声明了四个特殊功能.

  1. 默认构造函数
  2. 默认析构函数
  3. 默认赋值运算符
  4. 默认的成员复制运算符

题:

如果用户定义了其中任何一个,[例如:析构函数]将不会声明这三个函数的其余部分.那是对的吗?或者它只适用于默认构造函数,并复制构造函数?

jua*_*nza 5

如果声明自己的任何类型的构造函数(包括复制构造函数),则不再隐式声明默认构造函数.其余的是(除非你自己宣布其中一个).

但是,如果您发现自己声明了2,3或4中的任何一个,那么即使编译器隐式声明它们,您也很可能应该声明其他两个.这被称为三规则.

在C++ 11中编辑还有隐式声明的移动复制构造函数移动赋值运算符,因此三的规则成为五的规则.

  • 随着移动语义的引入,制定"五条规则". (3认同)

Hac*_*ess 5

本页末尾有 Howard Hinnant 提供的信息丰富且简洁的表格https://howardhinnant.github.io/classdecl.html

在此输入图像描述

  • 该图形不包含颜色含义的信息。我认为红色意味着“这种情况发生了,但通常不好,你应该自己声明”。 (2认同)