猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
C ++是否为全局和类静态变量调用析构函数?
在我的示例程序中,看起来它确实在两种情况下都调用了析构函数。在什么时候它称为全局和类静态变量的析构函数,因为它们应在程序堆栈的数据部分中分配?
一只斗牛犬
浏览 718
回答 3
3回答
芜湖不芜
根据C ++ 03标准的第3.6.3节:从main返回和调用exit(18.3)的结果,将调用静态存储持续时间初始化对象的析构函数(12.4)(在块作用域或命名空间作用域声明)。这些对象按照其构造函数完成或动态初始化完成的相反顺序销毁。如果对象是静态初始化的,则该对象的破坏顺序与该对象被动态初始化的顺序相同。对于数组或类类型的对象,该对象的所有子对象都必须先销毁,然后再销毁在构造子对象期间初始化了静态存储时间的任何本地对象。此外,第9.4.2 7节规定:静态数据成员的初始化和销毁完全类似于非本地对象(3.6.2、3.6.3)。但是,如果析构函数没有可观察到的行为,则可能不会调用它。特里·马哈菲(Terry Mahaffey)在回答“是否保证C ++析构函数直到块末尾才被调用?”中对此进行了详细说明。。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
C++
typedef入门问题
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续