[C++, Basic, 02] 控制对象初始化与析构的顺序

ObjDef.h

 1 /*
 2  *
 3  * Date: 2019.09.07
 4  *
 5  */
 6 
 7 #ifndef _H_H_OBJ_DEF_H_H_
 8 #define _H_H_OBJ_DEF_H_H_
 9 
10 #include <iostream>
11 
12 class ObjA
13 {
14 public:
15     ObjA() { std::cout << "Construct ObjA" << std::endl; }
16     ~ObjA() { std::cout << "Destruct ObjA" << std::endl;  }
17 };
18 
19 class ObjB
20 {
21 public:
22     ObjB() { std::cout << "Construct ObjB" << std::endl; }
23     ~ObjB() { std::cout << "Destruct ObjB" << std::endl; }
24 };
25 
26 class ObjC
27 {
28 public:
29     ObjC() { std::cout << "Construct ObjC" << std::endl; }
30     ~ObjC() { std::cout << "Destruct ObjC" << std::endl; }
31 };
32 
33 #endif

问题描述:

假如有多个对象,如何控制每个对象的初始化与析构?

方法1:

使用指针。

如下代码:

 1 /*
 2  *
 3  * Date: 2019.09.07
 4  *
 5  */
 6 
 7 #include <iostream>
 8 
 9 #include "ObjDef.h"
10 
11 int main()
12 {
13     ObjA* pAObj = NULL;
14     ObjB* pBObj = NULL;
15     ObjC* pCObj = NULL;
16 
17     // Frist initialize ObjB object.
18     pBObj = new ObjB();
19 
20     // Next ObjC
21     pCObj = new ObjC();
22 
23     // Next ObjA
24     pAObj = new ObjA();
25     
26     std::cout << "Hello World" << std::endl;
27 
28     // Frist free ObjC
29     delete pCObj;
30 
31     // Next ObjA
32     delete pAObj;
33 
34     // Next ObjB
35     delete pBObj;
36 
37 
38     return 0;
39 }

执行结果:

 

 总结:

关键字new在使用的时候,分配对象内存,调用对象构造函数。

关键字delete在使用的时候,调用对象析构函数,释放对象占用内存。

方法2:

使用局部静态对象。如下代码所示。

 1 #include <iostream>
 2 
 3 #include "ObjDef.h"
 4 
 5 ObjA& theObjA()
 6 {
 7     static ObjA a;
 8     return a;
 9 }
10 
11 ObjB& theObjB()
12 {
13     static ObjB b;
14     return b;
15 }
16 
17 ObjC& theObjC()
18 {
19     static ObjC c;
20     return c;
21 }
22 
23 
24 int main()
25 {
26     // Frist ObjA
27     ObjA &a = theObjA();
28 
29     // Next ObjC
30     ObjC& c = theObjC();
31 
32     // Next ObjB
33     ObjB& b = theObjB();
34 
35     std::cout << "Hello World" << std::endl;
36 }

执行结果:

 

 总结分析:

 使用局部静态化对象,在调用相关函数时,完成对象的初始化,在main函数执行完毕,会按相反顺序进行释放。

 

转载于:https://www.cnblogs.com/AiLun/p/11483042.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值