在C/C++中,我们通常通过单例模式来保证全局对象只创建一次!除此之外,在《c++程序设计语言》21.5.2节中也介绍了一种全局变量都能只创建一次,并在对象作用域结束的时候清理对象。
假设有一个全局变量 global_var类型为A;
A.h,A.cpp分别包括类型A的头文件和实现文件。为了保证global_var只创建一次。
A.h
class Init
{
Init();
~Init();
static int count;
};
A.cpp
int Init::count = 0;
Init::Init()
{
if(count++ = 0)
构建global_var对象
}
Init::~Init()
{
if(--count== 0)
清理global_var对象
}
在对象global_var的构建过程,利用Init::count作为首次开关,以确保global_var只能进行一次初始化。
在实际操作中,使用这种技术来保证只进行一次初始化要慎重使用。在一个进程执行期间,如果所有代码都位于内存中,那么这种技术几乎没有什么开销。反之,如果并非所有的代码都处于内存中,其额外开销可能就很显著。所以最好尽可能的避免全局对象。