C++:默认复制构造函数是否受到其他构造函数和析构函数存在的影响?
据我们所知,如果有任何构造函数声明的(包括复制构造函数),默认构造函数(不带参数的构造函数)不是隐式创建的。默认复制构造函数(执行对象浅复制的构造函数)是否会发生同样的情况?另外,析构函数的存在是否会影响这一点?
As we know, if any constructor is declared (copy constructor included), default constructor (the one that takes no arguments) is not implicitly created. Does the same happen with a default copy constructor (the one that performs shallow copy of an object)? Also, does the presence of destructor affect this anyhow?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
12.8 #4 复制类对象
并且析构函数不起作用
12.8 #4 Copying class objects
And the destructor plays no part
这里的答案是正确的但不完整。它们对于 C++98 和 C++03 是正确的。在 C++11 中,如果声明了移动构造函数或移动赋值运算符,则不会获得复制构造函数。此外,如果您声明了复制赋值运算符或析构函数,则不推荐使用复制构造函数的隐式生成。 12.8 [类.副本]:
The answers here are correct but not complete. They are correct for C++98 and C++03. In C++11 you will not get a copy constructor if you have declared a move constructor or move assignment operator. Furthermore if you have declared a copy assignment operator or a destructor, the implicit generation of the copy constructor is deprecated. 12.8 [class.copy]:
不会。除非您提供自己的复制构造函数,否则您将获得默认的复制构造函数,并且析构函数的存在或不存在没有区别。
No. You'll get a default copy constructor unless you supply your own copy constructor, and the presence or absence of a destructor makes no difference.
否。请注意,它
不提供复制构造函数,而是生成默认的复制构造函数。
No. And note that
does not provide a copy constructor, and a default one is generated.
除非您定义自己的复制构造函数,否则始终会创建默认的复制构造函数。不使用任何其他构造函数来定义不带参数的构造函数,以避免调用它,从而跳过真正的构造函数的代码。
The default copy constructor is always created, unless you define your own one. The constructor with no arguments isn't defined with any other constructor present to avoid calling it and therefore skipping the real constructor(s)'s code.