5、使用相同形式的new和delete
1、new和delete
new和delete是C++用来动态内存申请和释放的操作符,会调用构造函数和析构函数。在
Effective_C++:3、尽量以new和delete取代malloc和free中有介绍。
new和delete有两种形式。
申请的内存中有一个对象时:
string *pstring1 = new string;
...
delete pstring1;
申请的内存中有多个对象时:
string *pstring1 = new string[100];
...
delete [] pstring1;
当使用不同形式的delete和new搭配时,可能会导致调用的析构函数和构造函数次数不一致,出现意料之外的错误。
3、使用相同形式的new和delete
因此,牢记,使用new创建,就使用delete来销毁;使用new[]来创建,就用delete[]来销毁。
特别地,在一个class中多个构造函数包含并初始化同一个指针时,若用到new,请使用相同形式的new,否则,析构函数的delete形式无法确定。
如下,使用typedef定义一个对象数组,用new来为数组申请内存,则需要使用delete[]。故最好不要对数组做typedef,同时,也可以使用STL中的string、vector等模板来代替数组。
typedef string sAddressLines[4];
...
string *psal = new sAddressLines;
...
delete [] psal;