【发布时间】:2021-07-12 23:15:59
【问题描述】:
struct A1
{
~A1() {} // A1 is not trivially destructible
};
struct A2
{
~A2() = default; // A2 is trivially destructible
};
A2 比 A1 更好,因为 A2 可以轻易破坏,而 A1 则不行。
我想也许我们可以放心地说:
1.永远不要使用用户定义的空析构函数。
2.任何用户定义的空析构函数都应替换为默认析构函数。
我说的对吗?
【问题讨论】:
-
我与 2 争论“任何用户定义的空析构函数都应该删除”。除非您出于自我记录的目的需要将其保留为默认值。
-
@Yksisarvinen 核心准则说:“如果默认析构函数足够,请使用它。”所以我会说:是的,替换。
-
t@Roxxorfreak 这里的“默认”似乎意味着“隐式”。链接规则的第一句话说:“这个类需要析构函数吗?”是一个令人惊讶的有见地的设计问题。对于大多数类来说,答案是“否”,要么是因为该类没有资源,要么是因为销毁是由零规则处理的。零规则说:If you can avoid defining default operations, do
标签: c++ c++11 destructor semantics idioms