Effective_C++:5、使用相同形式的new和delete

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;

        使用new时:首先,进行内存配置,返回其地址;然后,根据new的形式来调用一个或多个构造函数。

        同样,使用delete时:首先,调用一个或多个析构函数,delete不知道指针指向的是单一对象还是对象数组,所以用delete即为单一对象,用delete[]即为对象数组;然后,释放其内存。

2、为啥使用相同形式的new和delete

        当使用不同形式的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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值