Effect C++ 学习笔记3
2015-02-13 15:41
281 查看
条款3:尽量使用new和delete而不用malloc和free
原因很简单:malloc和free是C语言的产物,它们并不知道构造函数和析构函数。
例子:
1.Arr1中有足够10个string对象存放的空间,但是内存里面并没有创建完整的string对象。
用free释放内存,free不会调用析构函数
2.Arr2中不但有足够10个string对象存放的空间,string对象已经完全构造好,可以安全的使用。
如果new/delete和malloc/free没有配对使用,则会造成不可预测的结果。
C库里面都是malloc和free,因为C里面没有面向对象这一概念,自然就没有构造函数和析构函数的概念了。
例如:
原因很简单:malloc和free是C语言的产物,它们并不知道构造函数和析构函数。
例子:
1.Arr1中有足够10个string对象存放的空间,但是内存里面并没有创建完整的string对象。
string *Arr1 = static_cast<string *>(malloc(10 * sizeof(string)));
用free释放内存,free不会调用析构函数
free(Arr1);
2.Arr2中不但有足够10个string对象存放的空间,string对象已经完全构造好,可以安全的使用。
string *Arr2 = new string[10];用delete释放内存,delete会调用析构函数
delete[] Arr2; //new和delete要采用相同的格式
如果new/delete和malloc/free没有配对使用,则会造成不可预测的结果。
C库里面都是malloc和free,因为C里面没有面向对象这一概念,自然就没有构造函数和析构函数的概念了。
例如:
char * strdup(const char *ps); // 返回 ps 所指的拷贝
相关文章推荐
- Effect C++ 学习笔记4
- C++学习笔记二 —— 3.3 指针类型
- more effective c++学习笔记 ---- 条款31
- unix_c++学习笔记1
- c++学习笔记
- c++学习笔记 2005-9
- 一个C++程序员的Delphi学习笔记
- C++ 学习笔记 I/O流的常用控制符
- 高质量C++/C编程指南学习笔记(上)
- c++入门学习笔记指针篇
- C++学习笔记-类的继承(派生类)
- 不能空着,发篇以前的C++学习笔记,不过现在在学C#
- C++学习笔记(1)——基类、派生类的对象空间
- C++学习笔记
- C++学习笔记(5)
- C++ :学习Proxy Class之笔记2
- 一个C++程序员的Delphi学习笔记
- C++的学习笔记
- c++学习笔记
- C++ 学习笔记