您的位置:首页 > 其它

调用构造函数和析构函数的顺序

2016-03-20 08:59 369 查看
       构造函数的作用是C++为了解决数据初始化而产生的。因为对对象的初始化,类的数据成员是不能在声明类时初始化的。因为类是抽象的,并不是一个实体,并不占储存空间,显然无法容纳数据,所以便出现了构造函数。

     析构函数是一种特殊的成员函数,它的作用与构造函数相反,他的名字是在类名前加上一个“~”符号,在C++中“~”是位取反运算符。特征是:1.在对象的生命周期结束时,会自动执行析构函数。2.析构函数的作用并不是为了删除对象,而是撤销对象占用的内存前完成一些清理任务,是这部分内存可以重新被程序分配给新对象使用。3.析构函数不返回任何值,没有函数类型,也没有函数参数,由于没有函数参数它不能被重载,一个类可以有多个构造函数但只有一个析构函数。

     调用析构函数和构造函数的顺序:

先构造的后析构,后构造的先析构,它相当于一个栈先进后出;

下面我们来写一下简单的代码来说明它:

#include<iostream>
using namespace std;
class Test
{
public:
Test(int test):m_test(test){}
~Test(){cout<<"析构函数执行!"<<m_test<<endl;};
void show()
{
cout<<"构造函数执行"<<endl;
cout<<m_test<<endl;
}
private:
int m_test;
};
int main()
{
Test t1(2),t2(5);
t1.show();
t2.show();
return 0;
}

结果是:

由图可以清楚看到顺序;

         什么时候调用构造函数和析构函数呢?

(1)在全局范围内定义的对象,他的构造函数在文件中所有函数(包含main函数)执行前调用它,当main函数执行完毕或使用exit提前结束运行前调用析构函数;

(2)如果定义的是局部的自动对象,则在建立对象时调用对象时调用其构造函数。如果函数被多次调用,则在建立对象时,都要调用构造函数,在函数调用结束,对象释放时先调用析构函数。

(3)如果函数中定义的是静态局部变量,则只在程序的第一次调用构造函数一次,在调用对象结束时,对象不释放,因此不能调用析构函数,只在main函数结束时调用析构函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: