C++不同物件的生存方式及C++程式的生与死(建模式与解模式) [大三TJB_708]

来源:互联网 发布:花园战争2淘宝 编辑:程序博客网 时间:2024/06/04 17:48

1 C++不同物件的生存方式 

在C++中,有四种方式可以生成一个物件。它们是in stack、in heap、global、local static。

 

1.1in stack

在栈中产生物件的对象指产生局部非静态物件(对象)。
void YourFun(){//在栈中产生物件CType NewType;......}
 

1.2in heap

在堆中产生物件指动态分配的物件。
void YourFun(){//在堆中产生NewType物件CType NewType = new CType();......} 
 

1.3 global

产生一个全局物件
CType NewType;
 

1.4local static

产生一个局部静态物件
void YourFun(){//在栈中产生物件static CType NewType;......}
 

2 物件特性

不论任何一种形式产生的物件,C++都会产生一个针对NewType建模式的呼叫动作(执行构造函数)。前两种情况,C++在配置记忆体--来自栈或者堆之后立刻产生一个隐藏的建模式呼叫。第三种情况的建模式呼叫必须靠startup码来帮忙,startup码是一种更早于程式进入点执行起来的码,由C++编译器提供。第四种(局部静态物件)类似C语言中的静态局部变量。只会有一个实体产生,而且在固定的记忆体上。它的建模式在控制权第一次移转到其宣告处(也就是定义局部物件的函数)第一次被呼叫时被呼叫。
 

3 C++程式的生与死,建模式与解模式

建模式是物件诞生时第一个执行(自动执行)的韩式,它的函式名和类名相同。
解模式是物件将被毁灭前一刻最后执行(自动执行)的函式。它的函式名和类名相同,再在最前面加一个‘~’符。
由于C++物件产生的方式有四种,每种物件产生和毁灭的时间会不一样,这就导致不同类型的物件执行建模式和解模式的时间不同。
根据物件生命周期的不同,C++程式(物件)生时调用相应的类解模式函数(构造函数),当C++程式死时调用相应类的解模式(析构函数)。对于C++物件的不同生存类别可以总结如下(侯捷:《深入浅出 MFC》之C++重要性质):
  • 对于全局物件,程式一开始,其建模式就先被执行(比程式进入点更早(main)),程式即将结束前期解模式被执行。
  • 对于局部物件,当物件诞生时,其建模式被执行;当程式流程将离开该物件的存活范围时其解模式被执行。
  • 对于静态局部物件,当物体诞生时建模式被执行;当程式即将结束时其解模式被执行,但和全局物件相比,局部静态变量的解模式先被执行。
  • 对于用new方式产生出来的局部物件,当物件诞生时其建模式被执行(C语言中的malloc函数只是申请空间,new还会引起其建模式执行)。解模式则在物件被delete时执行。

 

此次笔记记录完毕。