一、全局变量
全局变量要求在第一次执行前就被准备好,在程序结束时被销毁。因为构造函数在执行期才能实施,所以需要对一个全局对象做静态初始化。如下面代码所示,后三行的对象没法在编译器完成初始化(都是非常量表达式),所以需要静态初始化并且也需要内存静态释放操作(静态意思是看起来像在程序执行前构造或者在程序结束后释放内存,主程序开始时执行一次初始化,主程序结束时执行一次释放,主程序执行期间不执行)
extern int i; //下面全部要求静态初始化 int j=i; int *pi=new int(i); double sal=compute_sal(get_employee(i));
1.munch策略:
①为每一个需要静态初始化的文件产生一个_sti()函数,内含必要的构造函数调用操作或内联扩张。
②在每一个需要静态的内存释放操作的文件中产生一个_std()函数,内含必要的析构调用操作或是其内联扩张,
③提供一组运行时库的munch函数:一个_main()函数,用以调用可执行文件中的所有_sti()函数,以及一个exit()函数(用以调用所有_std()函数)
其中_main()被作为主程序的第一个指令,exit()作为主程序的最后一个指令。如下所示
int main() { _main(); ... exit(); }
2.缺点:需要静态初始化的全局变量不能放在异常处理的try语句中,因为不能够静态释放。