在我的示例程序中,看起来它确实在两种情况下都调用了析构函数。在什么时候它称为全局和类静态变量的析构函数,因为它们应在程序堆栈的数据部分中分配?
3 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
根据C ++ 03标准的第3.6.3节:
从main返回和调用exit(18.3)的结果,将调用静态存储持续时间初始化对象的析构函数(12.4)(在块作用域或命名空间作用域声明)。这些对象按照其构造函数完成或动态初始化完成的相反顺序销毁。如果对象是静态初始化的,则该对象的破坏顺序与该对象被动态初始化的顺序相同。对于数组或类类型的对象,该对象的所有子对象都必须先销毁,然后再销毁在构造子对象期间初始化了静态存储时间的任何本地对象。
此外,第9.4.2 7节规定:
静态数据成员的初始化和销毁完全类似于非本地对象(3.6.2、3.6.3)。
但是,如果析构函数没有可观察到的行为,则可能不会调用它。特里·马哈菲(Terry Mahaffey)在回答“是否保证C ++析构函数直到块末尾才被调用?”中对此进行了详细说明。。
- 3 回答
- 0 关注
- 717 浏览
添加回答
举报
0/150
提交
取消