显式声明默认析构函数(使用= default
)和不声明任何内容之间有什么区别?是否有需要明确定义至少一个默认析构函数的情况?
请注意,我不是在谈论需要释放一些已分配的内存,我是在询问除了默认值之外什么都不做的析构函数
我无法遇到前者与后者有不同行为的情况。在这两种情况下,编译器似乎都会生成对父析构函数或成员析构函数的调用。
在这两种情况下,两种行为(有或没有显式默认的析构函数)似乎都是等价的:
// 1
struct A {
~A() { std::cout << "~A()\n"; }
};
struct B : public A {
// Comment this line out
~B() = default;
};
// 2
struct C {
~C() { std::cout << "~C()\n"; }
};
struct D {
// Comment this line out
~D() = default;
C c;
};
int main() {
B b;
D d;
return 0;
}