脚本建构次序技巧

 问:在C++中,在调用程序进入点(main())或者windows下的WinMain()之前,全局及静态对象已被构建。然而,我们完全不可预知这些对象的构造函数的调用次序。在main()或者WinMain()结束返回之后,会调用全局及静态对象的析构函数,而这些函数的调用次序又是无法预知的。如何避免这种不可控制的行为?

 答:若C++能给予我们更多的控制能力,指明全局及静态对象的实例构建,析构次序,那么我们就可以把子系统做成单例定义为全局变量,而不必动态内存分配。可惜,我们并不能控制这些。一,按需建构:可以使用一个小技巧,函数并不会于mian()之前建构,而是在第一次调用该函数时才建构。利用这一技巧,把静态变量定义在函数内,返回其引用,便可控制其建构。遗憾的是这种方法并不能控制析构次序。二,行之有效的简单方法,放弃建构析构函数完全不做任何事情。自定义启动结束函数作为子系统的调用结束次序。

感悟来自《游戏引擎架构》,如下图:






猜你喜欢

转载自blog.csdn.net/zhaoguanghui2012/article/details/79236082
今日推荐