delete与delete []有什么区别?

  • 对于简单类型来说,使用new分配后,不管是数组数组还是非数组形式,两种方式都可以释放内存:
    int *a = new int(1);
    delete a;
    int *b = new int(2);
    delete [] b;
    int *c = new int[11];
    delete c;
    int *d = new int[12];
    delete [] d;
    
  • 对于自定义类型来说,就需要对于单个对象使用delete,对于对象数组使用delete [],逐个调用数组中对象的析构函数,从而释放所有内存;

    如果反过来使用,即对于单个对象使用delete [],对于对象数组使用delete,其行为是未定义的;

  • 所以,最恰当的方式就是如果用了new,就用delete;如果用了new [],就用delete []

发表评论

后才能评论

评论(1)

  • 村口树哥 普通 2022-02-10 10:21 上午

    对于new[]得到的对象数组,只有当类存在自定义的析构函数的情况下,才会多使用一些bytes记录数组的长度以及内存对齐;