zoukankan      html  css  js  c++  java
  • 条款16:成对使用new以及delete的时候应该采取相同的形式

    首先思考下面的代码:

    1 string * stringArray = new string[100];
    2 ...
    3 delete stringArray;
      这是最常见的错误之一了,new与delete不配对,但是仔细想想new与delete为什么一定要配对呢?
      可以想到一种可能就在分配数组的时候,可能记录了数组大小的信息,这样在delete的时候根据是delete或者是delete[]会由数组大小信息做出不同的判断。
    一种可能的实现方式也许就像下面这样。
    n,string0,string1,string2.......
      这样在使用delete[]的时候就会根据这个n来决定释放的空间大小了。
     
    还有就是最好不要去对数组去做typedef,直接用vector去代替可能更好,考虑下面这个例子:
    typedef string strArray[4];
    string * pal = new strArray;
    那么在delete的时候可能就去这样做:
    delete pal; (实际上这样做大错特错了)
    delete [] pal;//这样才是对的啊。
     
    小结:new与delete配对,new[]与delete[]配对,其实new[]的使用最好还是交给vector等容器来管理比较好一点。 而new的使用建议更换成自定义的一个RAII类来进行资源的管理而不要使用手动的new以及delete。
  • 相关阅读:
    移动端前端开发模型
    swift中高阶函数map、flatMap、filter、reduce
    函数式编程-构建
    Swift 4.0:访问级别(访问控制)
    swift内存管理
    swift where 的作用
    Swift 中的协议
    swift语言点评二十一-协议
    swift语言点评二十-扩展
    swift 20
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4857542.html
Copyright © 2011-2022 走看看