C++ 成对使用new和delete时要采取相同形式

20180310 C++ 成对使用new和delete时要采取相同形式

建议用下面的写法:
std::string *stringPtr1 = new std::string;
std::string *stringPtr2 = new std::string[100];
...
delete stringPtr1;//删除一个对象
delete[] stringPtr2;//删除一个由对象组成的数组


若对stringPtr1使用 "delete[]"形式,结果未有定义,但不太可能让人愉快。


结论:若你调用new时使用了[],必须在对应delete时也使用[],若调用new时没有使用[],则不该在对应调用delete时使用[]。


以new创建某种typedef类型对象时,delete的选用问题:
eg:


typedef std::string AddressLines[4];//每个人的地址有4行,
                           //每行是一个string
由于AddressLines是个数组,若这样使用new:
std::string* pal = new AddressLines;//注意,"new AddressLines"返回                                    // 一个string*,
                                    //就像"new string[4]"一样




那就必须匹配"数组形式"的delete:
delete pal;//行为未有定义!
delete[] pal;//OK!


为了避免诸如此类的问题,尽量不要对数组形式做typedefs动作。


注意:若你在new表达式中使用[],必须在相应的delete表达式中也使用[]。若在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。




























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值