C++ 基础 - delete 和 delete []

看到一些代码,使用 new [] 创建并分配内存了数组,且并未使用 delete [] ,而是使用 delete 进行释放该数组。所以回顾一下 delete 和 delete [] 的区别。

使用 delete 释放 new [] 创建并分配内存的数组,该操作先释放数组的内存,并调用数组第一个对象的析构函数。对于基础类型(如:int)的数组来说,并没有额外的资源需要在析构函数中释放,所以即便未调用数组后续对象的析构函数,也不会出现内存泄漏的问题。

但是对于一些自定义对象的数组来说,有时这些对象需要在析构函数中释放额外的资源,那么使用 delete 就会造成除数组第一个对象正确释放外,其余对象未能正确释放的问题了。

结论就是,还是规范编程吧。

示例:

#include <iostream>

int main()
{
    int length = 10000;
    for (int i = 0; i < length; i++) {
        int* tmp = new int[10];
        delete tmp;
        std::cout << i << "\n";
    }
}

结果:

posted @ 2021-03-29 11:20  郑大峰  阅读(545)  评论(0编辑  收藏  举报