Posted on 2007-08-13 10:12
宝杉 阅读(402)
评论(0) 编辑 收藏 引用 所属分类:
C++
free和delete
只是把指针所指的内存给释放掉,但并没有把指针本身干掉。
注意:
(1)指针消亡了,并不表示它所指的内存会被自动释放。
(2)内存被释放了,并不表示指针会消亡或者成了NULL指针。
比较
malloc和free:无法满足动态对象的要求。对象在创建同时进行构造,消亡同时析构。
malloc free是库函数,不是运算符,不受编译器控制。
new和delete:不是库函数,能动态内存分配和清理内存。
内存耗尽
内存耗尽时new和malloc返回NULL。但在WIN32下,使用虚拟内存,不会耗尽的。
处理内存耗尽大概有两种。
A *a = new A;
1 一处内存申请
if(a == NULL)
{
return;
}
2 如果有多处申请内存,则
if(a == NULL)
{
cout << “Memory Exhausted” << endl;
exit(1);
}
new与delete使用要点
1 new内置了sizeof、类型转换和类型安全检查功能。
2 new在创建非内部数据类型的动态对象的同时完成了初始化工作。
3 对象有多个构造函数,那么new的语句也可以有多种形式。
例如:diary files\obj.txt
4 如果用new创建对象数组,那么只能使用对象的无参数构造函数。例如
Obj *objects = new Obj[100]; // 创建100个动态对象
不能写成
Obj *objects = new Obj[100](1);// 创建100个动态对象的同时赋初值1
5在用delete释放对象数组时,留意不要丢了符号‘[]’。例如
delete []objects; // 正确的用法
delete objects; // 错误的用法
后者相当于delete objects[0],漏掉了另外99个对象。