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,除非有一些特殊的需求。
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,除非有一些特殊的需求。
相关文章推荐
- new&delete 与 new[]&delete[]
- Effective C++ 3e----new & delete(八)条款2:写了placement new也要写placement delete
- C++内存管理基础之new & delete
- C++中new&delete与malloc&free比较
- 7.关于申请与释放内存new & delete
- new&delete
- C++内存管理基础之new & delete
- Memory management: default new & delete vs. allocator & deallocator using a pool
- new&&delete 与 malloc&&free 的基本结构
- new和delete && new[] 和delete[]
- C++ new & delete
- 动态内存管理---new&delete
- cppTest-7.6:重载new&delete
- 动态对象创建(new/delete & malloc/free)
- C++内存管理基础之new & delete
- C++:new&delete
- malloc/free & new/delete
- cppTest-3.0:指针相关-3(new&delete)
- 极客班 c++(下)第一周学习笔记 ——new & delete
- public void Delete<T>(List<T> EntityList) where T : class, new()