析构函数调用顺序

原创 2016年08月30日 22:08:41

设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?


C c;
voidmain()
{
    A*pa=newA();
    B b;
    staticD d;
    delete pa;
}

这道题主要考察的知识点是 :全局变量,静态局部变量,局部变量空间的堆分配和栈分配

解题思路:
其中全局变量和静态局部变量时从静态存储区中划分的空间(未初始化为BSS,已初始化为数据段)
二者的区别在于作用域的不同,全局变量作用域大于静态局部变量(只用于声明它的函数中),
而之所以是先释放 D 在释放 C的原因是, 程序中首先调用的是 C的构造函数,然后调用的是 D 的构造函数,析构函数的调用与构造函数的调用顺序刚好相反
局部变量A 是通过 new 从系统的堆空间中分配的,程序运行结束之后,系统是不会自动回收分配给它的空间的,需要程序员手动调用 delete 来释放。
局部变量 B 对象的空间来自于系统的栈空间,在该方法执行结束就会由系统自动通过调用析构方法将其空间释放。
之所以是 先 A  后 B 是因为,B 是在函数执行到 结尾 "}" 的时候才调用析构函数, 而语句 delete a ; 位于函数结尾 "}" 之前。









版权声明:本文为博主原创文章,未经博主允许不得转载。

C++多个类中构造函数与析构函数的调用顺序

C++中有一个很重要的法则:使用构造函数创建对象的顺序与使用析构函数释放对象的顺序相反。对于一些C++的初学者来说,这是一条有点费解的法则,那么该怎么理解和清晰的表现出来呢?下面我们通过程序来体现一下...
  • casky237
  • casky237
  • 2017年01月14日 22:33
  • 582

C++继承中构造函数、析构函数调用顺序及虚析构函数

C++继承中构造函数、析构函数调用顺序及虚析构函数 首先说说构造函数,大家都知道构造函数里就可以调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数...
  • u012861978
  • u012861978
  • 2016年02月16日 11:29
  • 1034

C++派生类的构造函数和析构函数执行顺序及其构造形式

在C++程序员的面试中,经常会出现派生类与基类的构造函数、析构函数的执行顺序。其实这是一个很基本的问题,没有什么难度,只需要记住就OK了。      1.派生类的构造函数和析构函数的执行顺序   ...
  • u013951778
  • u013951778
  • 2015年08月29日 09:46
  • 1206

总结笔记-c++成员变量、构造函数以及析构函数的执行顺序

在我的之前的博客http://blog.csdn.net/caoyan_12727/article/details/52356844有提到c++各种变量的初始化规则,本文将总结c++中涉及到的各种变量...
  • caoyan_12727
  • caoyan_12727
  • 2016年09月03日 12:14
  • 943

包含对象成员的类的构造与析构顺序

构造函数的执行顺序: (1)存在继承关系时,先执行父类的构造函数,再执行子类的构造函数; (2)当一个类中含有对象成员时,在启动本类的构造函数之前,先分配对象空间,按对象成员的声明顺序执行他们各自的构...
  • pfd001
  • pfd001
  • 2016年03月25日 04:00
  • 907

关于c++显示调用析构函数的陷阱

现在在写一个项目,需要用到多叉树存储结构,但是在某个时候,我需要销毁这棵树,这意味着如果我新建了一个树对象,我很可能在某处希望将这个对象的声明周期终结,自然会想到显示调用析构函数,但是就扯出来这么大个...
  • Scythe666
  • Scythe666
  • 2015年09月07日 19:27
  • 5142

关于基类和派生类的构造函数和析构函数的执行顺序问题

C++ 派生类的析构函数的调用顺序为: A)  基类、派生类和对象成员类的析构函数  B)  派生类、对象成员类和基类的析构函数  C)  对象成员类、派生类和基类的析构函数     D)  ...
  • dyx810601
  • dyx810601
  • 2016年08月02日 20:53
  • 3546

总结c++类的构造函数 拷贝构造函数 析构函数 赋值运算符重载的特点以及函数调用顺序

对 c++类成员函数中的构造函数 拷贝构造函数 析构函数 赋值运算符重载的一些特点以及函数调用顺序,并附上例子,希望对大家有帮助,有错误大家可以指出来。...
  • wenqiang1208
  • wenqiang1208
  • 2016年10月18日 19:04
  • 1070

小题目:构造函数,析构函数的顺序(全局变量、静态局部变量)

已知 A B C D 四个类对象,问析构函数的调用顺序C c; void main() { A*pa=new A(); B b; static D d; delete ...
  • oMengLiShuiXiang1234
  • oMengLiShuiXiang1234
  • 2016年05月12日 21:14
  • 1688

由显式调用析构函数引发的思考

前些日子使用Visual C++6.0  写程序,偶然发现在使用对象的成员时编译器提供的自动补全选项中,出现了如下情形(如右图):在自动补全选项中是有析构函数的(但是没有构造函数),这就让人产生疑问,...
  • luweirao
  • luweirao
  • 2016年05月10日 20:12
  • 272
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:析构函数调用顺序
举报原因:
原因补充:

(最多只允许输入30个字)