您的位置:首页 > 其它

new & delete

2011-10-28 10:04 148 查看
 Tips:

1 建议new,delete,而不是malloc,free

2 new要判断返回值,经常成功不代表一定成功

3 使用new动态分配内存:若没有足够内存,则new返回0(空值指针null pointer);

4 不要使用delete释放不是new分配的内存,delete释放指针指向的内存,但不会删除指针本身;

5 delete指针后尽量赋值NULL

6 new分配一块内存的时候,并没有对这块内存空间做清零等任何动作,delete同样

7 对空值指针应用delete是安全的;
8 创建数组时的静态联编与动态联编:数组声名int a[10], 静态联编,数组的长度在编译时确定;用new[]创建数组,动态联编,运行时为数组分配内存空间。动态-运行时分配内存。

深入new

当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。

class A

{
   int i;

public:

   A(int _i) :i(_i*_i) {}

   void Say()  { printf("i=%dn", i); }

};

//调用new:

A* pa = new A(3);
那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):
A* pa = (A*)malloc(sizeof(A));

pa->A::A(3);

return pa;

虽然从效果上看,这三句话也得到了一个有效的指向堆上的A对象的指针pa,但区别在于,当malloc失败时,它不会调用分配内存失败处理程序new_handler,而使用new的话会的。因此我们还是要尽可能的使用new,除非有一些特殊的需求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  delete null class