qiuyouzhi 发表于 2021-2-23 17:20:00

delete 和 delete[] 区别

本帖最后由 qiuyouzhi 于 2021-2-23 17:21 编辑

delete 和 delete[] 区别

对于 C++ 的内置类型,他俩是没有区别的。

可是如果释放的对象是个类型数组,那就会有问题了。

看代码:

# include <iostream>
using namespace std;

class Student
{
        public:               
                ~Student()
                {
                        cout << "awsl" << endl;
                }
};

int main()
{
        Student *s1 = new Student;
       
        return 0;
}

我定义了一个带有析构函数的 Student 类,并在下方定义了一个 Student类型的数组。

假设我们要释放它,这时,delete 和 delete[] 就有区别了:

delete 只会释放目标指针指向的内存并调用析构函数,而 s1 到 s1 的内容是不会被释放的,于是导致了内存泄漏。

而 delete[] 会释放那个数组的每一个对象并调用它们的析构函数。

综上,如果使用 delete 释放,则只会打印出一个 "awsl",随后内存泄漏。

而 delete[] 就会打印出 3 个 "awsl",并顺利结束程序。


如有错误,请回复指出!
页: [1]
查看完整版本: delete 和 delete[] 区别