C++类的构造和析构顺序


  1. #include <iostream>   
  2. #include <string>   
  3. using namespace std;  
  4.   
  5. class A  
  6. {  
  7. public:  
  8.     A(int k)  
  9.     {  
  10.         s = k;  
  11.         cout << k << "A is constructing\n";  
  12.     }  
  13.     ;  
  14.     ~A()  
  15.     {  
  16.         cout << s << "~A\n";  
  17.     }  
  18.     int s;  
  19. };  
  20.   
  21. void f()  
  22. {  
  23.     cout << "f is running\n";  
  24.     A s(2);// 优先级4   
  25.     static A t(3);// 相当于全局对象,优先级2   
  26. }  
  27.   
  28. int main(int argc, char **argv)  
  29. {  
  30.     cout << "main is running\n";  
  31.     A s(1);// 优先级3   
  32.     f();  
  33.     cout << "back in main" << endl;  
  34.     return 0;  
  35. }  
  36.   
  37. A t(4);// 全局对象,优先级1  
[cpp]
  1. 4A is constructing  
  2. main is running  
  3. 1A is constructing  
  4. f is running  
  5. 2A is constructing  
  6. 3A is constructing  
  7. 2~A  
  8. back in main  
  9. 1~A  
  10. 3~A  
  11. 4~A  

局部和静态局部对象(文件作用域)以文本定义顺序为顺序,(类成员属于此种情况)

静态对象在首次定义时构造一次;程序结束析构

全局对象在main之前构造;程序结束时析构

全局对象如果分布在不同文件中,则构造顺序随机

相关内容