• 条款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表达式中使用[]
     
  • 相关阅读:
    柳下品茗
    游百花诗意亭有感
    爱情如酒
    笑傲IT文坛
    面对诱惑,你会屈从吗?
    拓展人脉的三十六计
    世界经理人推荐:拓展人脉的两大法宝
    我还能做什么
    诗缘
    有谁陪我风雨同舟
  • 原文地址:https://www.cnblogs.com/Burgess-Fan/p/6783044.html
Copyright © 2020-2023  润新知