【c/c++】delete和delete[]详解

来源:互联网 发布:阿里巴巴有淘宝客吗 编辑:程序博客网 时间:2024/05/16 11:56

首先看一个程序

#include <iostream>using namespace std;int main(){int* pData = new int[50];*(pData + 5) = 10;//这里需要注意一点就是delete必须是在使用完以后才能将pData删除,否则输出的就是一个//错误的结果。正如类中析构函数一样,必须是在全部函数调用完以后才会运行cout << *(pData + 5) << endl;delete pData;pData = new int[50];*(pData + 5) = 10;cout << *(pData + 5) << endl;delete[]pData;return 0;}

delete只是释放了指针所指第一个对象的内存空间,delete[]则会调用这段内存空间里的每个数据的析构函数,将数据内部变量指针指向的内存也释放掉

#include <iostream>using namespace std;class Student{private:char* name;int age;public:Student(){name = new char[20];}~Student(){cout << "Name is been deleted!" << endl;delete[] name; //这里delete[]对应是char[20],不是之前的student[5]}};int main(){Student* student = new Student[5];delete[] student; //这里还是必须使用delete[],如果只是delete,程序就会出错。因为单纯的delete只是删除了指针指向的第一个//而没有将剩余的四个删除。student = NULL;student = new Student[2];delete[]student;return 0;}

即便返回的时候是一个指针,你也不能只是调用delete,而是要根据指针后面的指向的内容调用delete[]。

大致的意思:new 对应delete;new []对应delete[].

1 0
原创粉丝点击