【发布时间】:2020-10-24 16:31:04
【问题描述】:
我正在尝试了解各种功能的自动生成编译器代码的行为,例如:
- 析构函数
- 复制构造函数
- 赋值运算符
- 移动构造函数
- 移动赋值运算符
与未声明的情况相比,使用“= default”声明它们会导致任何功能差异吗? 这个问题的答案在上面列出的函数中是否有所不同? 如果没有功能上的差异,使用这两种情况的后果是什么?
复制用“= default”声明的构造函数
class MyClass
{
public:
MyClass();
MyClass(MyClass &other) = default;
OtherClass some_member;
};
未声明复制构造函数:
class MyClass
{
public:
MyClass();
OtherClass some_member;
};
【问题讨论】:
标签: c++ memory rule-of-three rule-of-zero rule-of-five