C++:默认的复制构造函数是否受到其他构造函数和析构函数的影响?

Sep*_*ram 8 c++ copy-constructor default-constructor

我们知道,如果声明了任何构造函数(包含复制构造函数),则不会隐式创建默认构造函数(不带参数的构造函数).使用默认复制构造函数(执行对象的浅层复制的构造函数)会发生同样的情况吗?此外,析构函数的存在是否会对此产生影响?

dub*_*nde 9

12.8#4 复制类对象

如果类定义没有显式声明复制构造函数,则会隐式声明一个

析构函数不起作用


How*_*ant 6

这里的答案是正确的但不完整.它们适用于C++ 98和C++ 03.在C++ 11中,如果已声明移动构造函数或移动赋值运算符,则不会获得复制构造函数.此外,如果已声明了复制赋值运算符或析构函数,则不推荐隐式生成复制构造函数.12.8 [class.copy]:

如果类定义没有显式声明复制构造函数,则没有用户声明的移动构造函数,并且没有用户声明的移动赋值运算符,复制构造函数被隐式声明为默认值(8.4.2).如果类具有用户声明的副本赋值运算符或用户声明的析构函数,则不推荐使用此类隐式声明.