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

构造函数按此顺序执行工作:

  1. 按声明顺序调用基类和成员构造函数

  2. 如果类派生自虚拟基类,则会将对象的虚拟基指针初始化

  3. 如果类具有或继承了虚函数,则会将对象的虚函数指针初始化。 虚函数指针指向类中的虚函数表中相应的虚函数项,确保虚函数正确地调用绑定代码。

  4. 它执行自己函数体中的所有代码。

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值