new & delete

来源:互联网 发布:ubuntu怎么安装到u盘 编辑:程序博客网 时间:2024/06/11 05:01
 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,除非有一些特殊的需求。


原创粉丝点击