分类: C/C++
2011-02-24 23:51:38
1,C++如何保证正确的初始化和清理并允许在堆上动态创建对象?使动态对象创建成为语言的核心。malloc和free是库函数,不在编译器控制 范围之内。要有一个能完成动态内存分配及初始化工作的运算符和另一个能完成清理及释放内存工作的运算符,编译器就可以保证所有对象的构造函数和析构函数都 会被调用。
2,当一个C++对象被创建时,有2件事情发生:a)为对象分配内存。b)调用构造函数来初始化那个内存。
C++强迫步骤b一定发生。而步骤a可以以几种方式发生:
I)静态存储区域,存储空间在程序开始之前就可以分配。
II)无论何时到达一个特殊的执行点(左花括号)时,存储单元在栈上被创建,出了执行点(右花括号),存储单元自动被释放
III)存储单元可以从一块堆(也称自由存储单元)的地方分配。称为动态内存分配,意味着可以在任何时候分配内存和决定需要多少内存。
3,C从堆中获取存储单元
申请内存malloc(),释放内存free()
obj* Obj = (obj*)malloc(sizeof(obj));//申请内存
Obj->initialize();//初始化内存
必须决定对象的长度,因为是一块内存而不是一个对象,所以malloc返回一个void*,C++不允许将void*赋予任何指针,所以必须转型。用户在使用对象之前必须对它初始化。C程序主要缺陷,使用对象时忘记执行初始化。
4,运算符new