• 条款16:成对使用 new和delete时要采取相同的形式


    std::string* stringPtr1=new std::string;
    srd::string* stringPtr2=new std::string[100];
     
    对应地 delete也应该使用相同的形式:
     
    delete stringPtr1;
    delete [] stringPtr2;
     
    规则就是:使用new时用了[],必须在对应调用delete时也要使用[]。
    如果new时没有用[],则调用delete时也不该用[]
     
    在typedef中也一样:
    当程序员以new创建tyoedef类型对象时,该以哪种delete形式删除之。
    typedef std:: string AddressLines[4];//每个人的地址有4行,每行是1个string
     
    由于AddressLines是个数组,如果这样使用new:
    std::string* pa1 = new AddressLines;
    那就必须匹配“数组形式”的delete:
    delete pa1;//行为未定义;
    delete [] pa1;//OK
     
    为避免此类错误,尽量不要对数组形式做typedef动作。
     
     
    记住:
        如果在new表达式中使用[],必须在相应的delete表达式中也使用[]。
        如果在new表达式中不使用[],则一定要在delete表达式中使用[]
     
  • 相关阅读:
    3.JavaWeb过滤器/拦截器/监听器及AOP编程的理解
    flex弹性盒里order属性示例
    flex的align-content、align-items的介绍
    flex的justify-content
    flex属性介绍
    flex模式下的导航条示例
    less变量用法讲解
    css变量的引用
    透视图的设置
    图片飞出效果
  • 原文地址:https://www.cnblogs.com/Burgess-Fan/p/6783044.html
Copyright © 2020-2023  润新知