条款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 所指的拷贝