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

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

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

脚本建构次序技巧

脚本建构次序技巧

脚本建构次序技巧

脚本建构次序技巧

脚本建构次序技巧

相关文章:

  • 2022-12-23
  • 2021-07-16
  • 2021-07-05
  • 2021-12-19
  • 2021-12-22
  • 2021-10-25
猜你喜欢
  • 2021-08-10
  • 2021-08-07
  • 2022-12-23
  • 2021-07-09
  • 2022-02-02
  • 2022-01-12
  • 2022-12-23
相关资源
相似解决方案