08-06 free和delete

freedelete

只是把指针所指的内存给释放掉,但并没有把指针本身干掉。

 

注意:

1)指针消亡了,并不表示它所指的内存会被自动释放。

2)内存被释放了,并不表示指针会消亡或者成了NULL指针。

比较

mallocfree:无法满足动态对象的要求。对象在创建同时进行构造,消亡同时析构。

malloc free是库函数,不是运算符,不受编译器控制。

newdelete:不是库函数,能动态内存分配和清理内存。

 

内存耗尽

内存耗尽时newmalloc返回NULL。但在WIN32下,使用虚拟内存,不会耗尽的。

处理内存耗尽大概有两种。

A  *a = new A;

1       一处内存申请

if(a == NULL)

{

     return;

     }

2    如果有多处申请内存,则

if(a == NULL)

{

     cout << Memory Exhausted << endl;

     exit(1);

}

 

newdelete使用要点

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个对象。

你可能感兴趣的:(08-06 free和delete)