您的位置:首页 > 编程语言 > C语言/C++

Effect C++ 学习笔记3

2015-02-13 15:41 281 查看
条款3:尽量使用new和delete而不用malloc和free

原因很简单: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 所指的拷贝
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: