【发布时间】:2020-11-19 20:58:30
【问题描述】:
来自 IBM.com (https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarg/cplr380.htm)
如果满足以下所有条件,则 A 类的析构函数是微不足道的:
- 它是隐式定义的
- A 的所有直接基类都有微不足道的析构函数
- 如果满足以下所有条件,A 的所有非静态数据成员的类都具有平凡的析构函数 A 类的析构函数是平凡的(不是必需的):
解释:
-
类中使用的构造函数已导入。类中没有创建新的构造函数。
-
来自网站:“直接基类是在其派生类的声明中直接作为基说明符出现的基类。”当我想知道什么是基本说明符时,兔子洞仍在继续。请帮忙。
-
数据类型是原始的。
如果我的任何解释有误或为了清楚起见可以进一步简化,请发表评论。
class Foo {
public:
~Foo() { s = “”; x = 0; vi.clear(); }
private:
string s;
int x;
vector<int> vi;
};
鉴于创建如上所示的析构函数被认为是一种不好的做法,是否有一种简单的方法可以记住何时需要创建析构函数?
【问题讨论】:
-
如果类的成员拥有(负责)在类被破坏时不会自动释放的资源,则需要一个析构函数。 (例如,如果持有拥有原始指针,其他资源由该类分配和拥有)或者它是一个像树一样的结构,其中破坏可能导致大量递归析构函数调用,这可能导致堆栈溢出。
-
目前尚不清楚您问题的哪一部分是来自 ibm.com 的逐字引用。能否请您 (1) 使用适当的标记 (
> …) 将直接引用标记为此类,以及 (2) 包含引用引用来源的链接? -
希望我更正了不清楚的报价并给出了正确的相应链接!
标签: c++ default destructor