c++中对象析构顺序研究

时间:2014-05-09 03:52:15   收藏:0   阅读:374

过程式析构:

测试案例:test.cpp

 

bubuko.com,布布扣
#include <iostream>
using namespace std;

class Test
{
public:
  Test(int dt=0){data=dt;}
  ~Test(){cout<<data<<endl;}
private:
  int data;
};

int w(void)
{
  Test b(7);
  Test c(8);
}

int main(int argc,char **argv)
{
  Test a(0);
  if(1==1)
  {Test a(1);Test b(2);}

  w();

  if(1==1)
  {Test a(3);Test b(4);}
  Test c(5);
  return 0;
}
bubuko.com,布布扣


程序结果:2 1 8 7 4 3 5 0

假设结论(析构时候顺序): 1.正序析构包含函数块 2.反序析构包含对象

对象式析构:

测试案例:test2.cpp

bubuko.com,布布扣
#include <iostream>
using namespace std;

class Test
{
public:
  Test(int dt=0){data=dt;cout<<data<<":construct"<<endl;}
  ~Test(){cout<<data<<":desctruct"<<endl;}
private:
  int data;
};

class Test2
{
public:
  Test2(int dt=0):a(1),b(2){data=dt;}
  ~Test2(){cout<<data<<":Test2"<<endl;}
private:
  int data;
  Test a;
  Test b;
  static Test c;
  static Test d;
};

Test Test2::c(3);
Test Test2::d(4);

int main(int argc,char **argv)
{
  Test2 e; 
  return 0;
}
bubuko.com,布布扣

 

程序结果:

3:construct
4:construct
1:construct
2:construct
0:Test2
2:desctruct
1:desctruct
4:desctruct
3:desctruct

假设结论(析构顺序):先析构自己,再析构普通成员对象 定义的反序,再析构static对象 定义的反序

c++中对象析构顺序研究,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!