C++类的构造函数与析构函数的调用顺序
来源:互联网 发布:资源分配软件 编辑:程序博客网 时间:2024/06/06 18:26
1构造函数的调用顺序[1]
构造函数按此顺序执行工作:
按声明顺序调用基类和成员构造函数。
如果类派生自虚拟基类,则会将对象的虚拟基指针初始化。
如果类具有或继承了虚函数,则会将对象的虚函数指针初始化。 虚函数指针指向类中的虚函数表中相应的虚函数项,确保虚函数正确地调用绑定代码。
它执行自己函数体中的所有代码。
2析构函数的调用顺序[2]
在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反:最先被调用的构造函数,其对应的(同一对象中的)析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。
可以简记为:先构造的后析构,后构造的先析构,它相当于一个栈,先进后出。
下面我们通过代码来验证,代码来自[3]:
<pre name="code" class="cpp">//测试构造函数和析构函数的执行顺序#include <iostream>using namespace std;class A{public:A(int n){cout<<"call structor A(int n):"<<endl;m_num = n;}A(const A &a){cout<<"call structor A(const A &a):"<<endl;}virtual ~A(){cout<<"call destructor ~A()."<<endl;}A& operator=(const A &a){this -> m_num = a.m_num;return *this;}private:int m_num;};class B:public A{public:B(int n):A(n){cout<<"call structor B(int n)"<<endl;}~B(){cout<<"call destructor ~B()."<<endl;}};int main(){A *pa = new B(10);delete pa;return 0;}
运行结果如下:
[1]:
http://msdn.microsoft.com/zh-cn/library/s16xw1a8.aspx
[2]
http://see.xidian.edu.cn/cpp/biancheng/view/197.html
[3]
http://jaden.blog.51cto.com/1549175/324480
0 0
- 类的构造函数与析构函数调用顺序
- 浅谈构造函数与析构函数的调用顺序
- 浅谈构造函数与析构函数的调用顺序
- 构造函数与析构函数的调用时间顺序
- 浅谈构造函数与析构函数的调用顺序
- 浅谈构造函数与析构函数的调用顺序
- 浅谈构造函数与析构函数的调用顺序
- C++调用构造函数与析构函数的顺序
- 浅谈构造函数与析构函数的调用顺序
- 浅谈构造函数与析构函数的调用顺序
- C++构造函数与析构函数的调用顺序
- 构造函数与析构函数的调用顺序
- 构造函数与析构函数的调用顺序
- 类的析构函数和构造函数调用顺序
- 拷贝构造,构造函数,析构函数的调用顺序
- 派生类构造函数和析构函数的调用顺序(C++)
- C++类的构造函数与析构函数的调用顺序
- 【c++】构造函数调用顺序的研究
- 2014秋C++第8周项目2参考-加班费
- hdu5064 dp
- MyBatis 如何搭建MyBatis环境
- uva 144 Student Grants(队列模拟过程)
- Spring配置文件的位置
- C++类的构造函数与析构函数的调用顺序
- 最通俗的ping原理
- cc150 1.1 1.2 1.3 1.4 1.5
- OC中的字典以及常用方法
- opencv2计算机视觉编程手册-学习之路(章1)
- 第8周项目3-多分段函数求值(switch)
- 我的第一篇博客
- eclipse基本快捷键(持续更新中....)
- Python 初学笔记