我试图了解各种功能的自动生成编译器代码的行为,例如:
- 析构函数
- 复制构造函数
- 赋值运算符
- 移动构造函数
- 移动赋值运算符
与未声明的情况相比,使用“= default”声明它们会导致任何功能差异吗?这个问题的答案在上面列出的函数中是否有所不同?如果没有功能差异,使用这两种情况的后果是什么?
使用“= default”声明的复制构造函数
class MyClass
{
public:
MyClass();
MyClass(MyClass &other) = default;
OtherClass some_member;
};
未声明复制构造函数:
class MyClass
{
public:
MyClass();
OtherClass some_member;
};