【发布时间】:2020-11-08 11:19:08
【问题描述】:
什么情况下我们需要默认生成析构函数?很清楚为什么我们需要默认生成的构造函数和 operator=,但是想不出应该使用默认生成的析构函数的情况。
class A
{
...
~A() = default;
...
};
【问题讨论】:
-
我很确定
~A() = default;总是等价于~A() {},所以提供的语法主要是为了对称;如果在某些地方允许=default而在其他地方不允许,那就太奇怪了。至于为什么您可能需要显式编写~A() {}而不是完全省略析构函数 - 例如当你想做它virtual。 -
@IgorTandetnik, gcc.godbolt.org/z/eh3Waz
-
一个空的析构函数将平凡的类型变成非平凡的类型。它可能会导致某些模板代码采用非最佳路径。
-
@DoehJohn : stackoverflow.com/questions/4943958/…
-
@DoehJohn 我做了一个例子。
标签: c++ c++11 destructor