As we know,如果声明了任何构造函数(包含复制构造函数),则不隐式地创建默认构造函数(不带参数的构造函数)。这是否与默认拷贝构造函数(执行对象的浅拷贝的构造函数)相同?另外,无论如何,析构函数的存在是否会影响它?C++:缺省拷贝构造函数是否受其他构造函数和析构函数影响?
8
A
回答
5
这里的答案是正确的,但不完整。它们对于C++ 98和C++ 03是正确的。在C++ 11中,如果您声明了移动构造函数或移动赋值运算符,则不会获得复制构造函数。此外,如果您已声明了复制赋值运算符或析构函数,则不建议使用隐式生成复制构造函数。 12.8 class.copy]:
如果类定义不明确 声明一个拷贝构造函数, 没有用户声明的举动 构造,并没有 用户声明的举动分配 运营商,一个拷贝构造函数是 隐式声明为默认 (8.4.2)。如果该类有 用户声明的复制分配运算符 或用户声明的析构函数,则不建议使用这种隐式声明 。
3
不会。你会得到一个默认的拷贝构造函数,除非你提供你自己的拷贝构造函数,并且析构函数的存在或不存在都没有区别。
1
默认的拷贝构造函数总是被创建的,除非你定义了自己的拷贝构造函数。没有参数的构造函数没有使用任何其他构造函数来定义,以避免调用它,因此跳过了真正的构造函数的代码。
+0
感谢您解释此行为的原因) – Septagram 2011-04-11 10:04:39
3
号并注意
MyClass
{
template <typename T> MyClass(const T&);
};
不提供拷贝构造函数,并产生一个默认的。
9
相关问题
- 1. 拷贝构造函数和函数从
- 2. 外部调用拷贝构造函数和析构函数
- 3. 移动构造函数和非常拷贝构造函数
- 4. 拷贝构造函数
- 5. 拷贝构造函数knowlege
- 6. 拷贝构造函数++
- 7. 的拷贝构造函数
- 8. 拷贝构造函数和operator =在C++
- 9. 指针和拷贝构造函数C++
- 10. 构造函数和析构函数 - C++
- 11. 缺省构造函数是否必需?
- 12. D结构体拷贝构造函数
- 13. 用模板拷贝构造函数替换默认拷贝构造函数
- 14. 构造函数中的调用基构造函数和其他构造函数
- 15. C++帮助拷贝构造函数
- 16. C++中拷贝构造函数
- 17. 拷贝构造函数在C++
- 18. 通用C#拷贝构造函数
- 19. C++拷贝构造函数语法
- 20. C#泛型拷贝构造函数
- 21. c#拷贝构造函数生成器
- 22. 基类的拷贝构造函数(C++)
- 23. 拷贝构造函数类C++
- 24. C++中的拷贝构造函数
- 25. C++编程拷贝构造函数
- 26. C++默认拷贝构造函数
- 27. C++拷贝构造函数怪异
- 28. 拷贝构造函数在C++
- 29. C++ std :: auto_ptr拷贝构造函数
- 30. C++默认的拷贝构造函数
为什么他们不推荐?我的析构函数是虚拟的,但是是空的。我真的被迫强制复制构造一代吗?我想我可以使用'default'? – 2014-03-28 18:14:22
@JanusTroelsen:我在这个答案中有一个基本原理:http://stackoverflow.com/a/11255258/576911是的,你可以使用'= default'。 – 2014-03-28 18:33:53