7.11 new/delete 的使用要点
2014-05-18 15:54
260 查看
运算符new 使用起来要比函数malloc 简单得多,例如:
int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];
这是因为new 内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new 在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么new 的语句也可以有多种形式。例如
class Obj
{
public :
Obj(void); // 无参数的构造函数
Obj(int x); // 带一个参数的构造函数
…
}
void Test(void)
{
Obj *a = new Obj;
Obj *b = new Obj(1); // 初值为1
…
delete a;
delete b;
}
如果用new 创建对象数组,那么只能使用对象的无参数构造函数。例如
Obj *objects = new Obj[100]; // 创建100 个动态对象
不能写成
Obj *objects = new Obj[100](1);// 创建100 个动态对象的同时赋初值1
在用delete 释放对象数组时,留意不要丢了符号‘[]’。例如
delete []objects; // 正确的用法
delete objects; // 错误的用法
后者相当于delete objects[0],漏掉了另外99 个对象
int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];
这是因为new 内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new 在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么new 的语句也可以有多种形式。例如
class Obj
{
public :
Obj(void); // 无参数的构造函数
Obj(int x); // 带一个参数的构造函数
…
}
void Test(void)
{
Obj *a = new Obj;
Obj *b = new Obj(1); // 初值为1
…
delete a;
delete b;
}
如果用new 创建对象数组,那么只能使用对象的无参数构造函数。例如
Obj *objects = new Obj[100]; // 创建100 个动态对象
不能写成
Obj *objects = new Obj[100](1);// 创建100 个动态对象的同时赋初值1
在用delete 释放对象数组时,留意不要丢了符号‘[]’。例如
delete []objects; // 正确的用法
delete objects; // 错误的用法
后者相当于delete objects[0],漏掉了另外99 个对象
相关文章推荐
- 高质量C++编程之(7.10 malloc/free 的使用要点 7.11 new/delete 的使用要点)
- malloc/free和new/delete的区别及使用要点(转)
- new/delete 的使用要点--刘锐
- 检测由new/delete使用不当引起的内存泄露
- 为什么new/delete和new[]/delete[]必须配对使用?
- C++ - new/delete与new[]/delete[]必须配对使用
- c++ 内存管理:9、malloc/free的使用要点 new/delete的使用要点
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
- C++复习要点总结之四New和delete使用
- 尽量使用new/delete操作符,而不是malloc/free来分配内存-------Effective C++学习笔记
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
- delete 使用要点
- 常见动态内存分配malloc()/free()、new/delete使用方法及常见错误
- C++中malloc/free和new/delete 的使用
- c++中优化内存分配:new/delete操作符;allocator类对象的使用;operator new/operator delete函数及定位new表达式
- C++中malloc/free和new/delete 的使用
- 为什么new/delete和new[]/delete[]必须配对使用?
- 【让你的C++程序更加高效】条款03:尽量使用new/delete而不是malloc/free
- 宏使用方法要点
- TClientDataSet使用要点