众所周知,如果声明了任何构造函数(包括复制构造函数),则不会隐式创建默认构造函数(不带参数的构造函数)。默认复制构造函数(执行对象浅拷贝的构造函数)也会发生同样的情况吗?此外,析构函数的存在是否会影响这一点?
问问题
1749 次
5 回答
9
12.8 #4复制类对象
如果类定义没有显式声明复制构造函数,则隐式声明
析构函数不起作用
于 2011-04-11T09:44:30.737 回答
6
这里的答案是正确的,但并不完整。它们适用于 C++98 和 C++03。在 C++11 中,如果您声明了移动构造函数或移动赋值运算符,您将不会获得复制构造函数。此外,如果您声明了复制赋值运算符或析构函数,则不推荐使用隐式生成复制构造函数。12.8 [class.copy]:
如果类定义没有显式声明复制构造函数,没有用户声明的移动构造函数,也没有用户声明的移动赋值运算符,则复制构造函数被隐式声明为默认值 (8.4.2)。如果类具有用户声明的复制赋值运算符或用户声明的析构函数,则不推荐使用此类隐式声明。
于 2011-04-11T15:21:53.840 回答
3
不。除非您提供自己的复制构造函数,否则您将获得默认的复制构造函数,并且析构函数的存在与否没有区别。
于 2011-04-11T09:31:43.277 回答
3
不,请注意
MyClass
{
template <typename T> MyClass(const T&);
};
不提供拷贝构造函数,默认生成一个。
于 2011-04-11T09:36:24.143 回答
1
除非您定义自己的副本构造函数,否则始终会创建默认的复制构造函数。没有参数的构造函数没有与存在的任何其他构造函数一起定义,以避免调用它并因此跳过真正的构造函数的代码。
于 2011-04-11T09:34:00.347 回答