其他分享
首页 > 其他分享> > 第六章:执行期语义学:对象的构造和析构

第六章:执行期语义学:对象的构造和析构

作者:互联网

 

 

一、全局变量

  全局变量要求在第一次执行前就被准备好,在程序结束时被销毁。因为构造函数在执行期才能实施,所以需要对一个全局对象做静态初始化。如下面代码所示,后三行的对象没法在编译器完成初始化(都是非常量表达式),所以需要静态初始化并且也需要内存静态释放操作(静态意思是看起来像在程序执行前构造或者在程序结束后释放内存,主程序开始时执行一次初始化,主程序结束时执行一次释放,主程序执行期间不执行)

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语句中,因为不能够静态释放。

标签:初始化,主程序,main,函数,静态,语义学,int,执行期,和析构
来源: https://www.cnblogs.com/wildricky/p/14949445.html