《深度摸索C++对象模子》读书笔记(6)[VC/C++编程]
本文“《深度摸索C++对象模子》读书笔记(6)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
***对象的构造和解构***
普通而言,我们会把object尽大概安排在利用它的那个程序区段四周,这样做可以节俭不必要的对象 产生操作和销毁操作.
***全局对象***
全局对象的静态初始化战略包含以下几个步骤:
(1)为每一个需求静态初始化的对象产生一个_sti_……()函数,内含必要的 constructor调用操作或inline expansions;
(2)为每一个需求静态的内存释放操作的对象产生一个_std_……()函数,内含必要 的destructor调用操作或inline expansions;
(3)在main()函数的首尾辨别增添一个_main()函数(用以调用可履行文件中的全部_sti()函 数)和一个_exit()函数(用以调用可履行文件中的全部_std()函数).
倡议根本不要用那些需求静态初始化的全局对象.
***部分静态对象***
假定我们有以下程序片段:
const Matrix& identity() {
static Matrix mat_identity;
// ...
return mat_identity;
}
此处的local static class object保证了以下语意:
(a)mat_identity的constructor必须只能施行一次,固然上述函数大概会被调用多次;
(b)mat_identity的destructor必须只能施行一次,固然上述函数大概会被调用多次.
编译器的实际做法以下:在第一次调用identity()时把mat_identity构造出来,而在与呼应文件关 联的静态内存释放函数中将其解构.(部分静态对象的地址在downstream component中将会被转换到程 序内用来安排global object的data segment中)
***对象数组***
假如你想要在程序中取出一个constructor的地址,这是不可以的.但是经过一个指针来激活 constructor,将无法存取default argument values.那么,若何支持以下的语句:
complex::complex(double=0.0, double=0.0);
当程序员写出:
complex c_array[10];
时,编译器终究需求调用:
vec_new(&c_array,sizeof(complex),10,&complex::complex,0);
为了办理这个问题,可由编译器产生一个内部的constructor,没有参数,在其函数内调用由程序员 供应的constructor,并将default参数值明确地指定过去:
complex::complex()
{
complex(0.0, 0.0);
}
以上是“《深度摸索C++对象模子》读书笔记(6)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |