C++学习008-delete与delete[]的差别

简介: 对于简单的数据类型,delete与delete[]是没啥差别的,就是等价的

例如  



int main()
{
  int *pdata = new int[20];
  delete pdata;
  //delete[] pdata;
    return 0;
}


这两是等价的,没有什么区别,

 

 

但是如果是一个动态分配数据的数据类型,就不同了,delete[]在释放数组控件前,对数组中每一个对象调用析构函数,而delete择仅仅是释放指针所指的控件

 

例如


class Student
{
private:
  char* name;
  int age;
public:
  Student() { name = new char[100]; };
  ~Student() { delete name; };
};
int main()
{
  Student* pData = new Student[20];
  delete[] pData;
    return 0;
}


在这里如果使用了delete,那就会有意想不到的后果了,至于什么后果,在我尝试编译的时候 ,触发了中断。


image.png

应该是内存访问有问题了。

目录
相关文章
|
18天前
|
C++
c++的学习之路:27、红黑树
c++的学习之路:27、红黑树
30 4
|
18天前
|
Java C++
C++的学习之路:21、继承(2)
C++的学习之路:21、继承(2)
18 0
|
18天前
|
编译器 C语言 C++
c++的学习之路:19、模板
c++的学习之路:19、模板
32 0
|
18天前
|
设计模式 存储 Android开发
c++的学习之路:18、容器适配器与反向迭代器
c++的学习之路:18、容器适配器与反向迭代器
21 0
|
18天前
|
存储 算法 C++
c++的学习之路:17、stack、queue与priority_queue
c++的学习之路:17、stack、queue与priority_queue
30 0
|
18天前
|
存储 C++ 容器
c++的学习之路:26、AVL树
c++的学习之路:26、AVL树
27 0
|
18天前
|
编译器 C++
c++的学习之路:22、多态(1)
c++的学习之路:22、多态(1)
21 0
c++的学习之路:22、多态(1)
|
18天前
|
安全 编译器 程序员
c++的学习之路:20、继承(1)
c++的学习之路:20、继承(1)
29 0
|
1天前
|
编译器 C++
【C++】继续学习 string类 吧
首先不得不说的是由于历史原因,string的接口多达130多个,简直冗杂… 所以学习过程中,我们只需要选取常用的,好用的来进行使用即可(有种垃圾堆里翻美食的感觉)
7 1
|
1天前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽
8 0