使用new分配动态数组的问题
我们知道new分配动态数组在释放的时候需要用delete运算符;同时如果分配的是动态数组则应该写成:delete []指针名,但是为什么下边使用double类型的动态数组在释放的时候可以delete p或者delete []p都可以,但是Point类型动态数组只能写成delete []ptr ,
我试了一下delete ptr会报错,请各位大神普及一下知识{:5_95:}
#include<iostream>
#include<string>
using namespace std;
class Point {
public:
Point(int = 0, int = 0);
~Point();
};
Point::Point(int a,int b)
{
cout << "gouzao" << endl;
}
Point::~Point()
{
cout << "xigou" << endl;
}
int main()
{
double *p;
p = new double;
for (int i = 0;i < 3;i++)
cout << *(p + 1) << " ";
delete p; //这里不会报错!!!!!
Point *ptr = new Point;
delete ptr; //这里报错,只能用delete[]ptr!!!!!!!
return 0;
}
第一个也有问题吧。你 new <T> 的形式,就要 delete [] claws0n 发表于 2018-10-18 10:45
第一个也有问题吧。你 new 的形式,就要 delete []
在visual studio里边运行没报错!!! 就是下雨了 发表于 2018-10-18 10:55
在visual studio里边运行没报错!!!
没有报错不代表没有问题。你把 delete 都删了也不会报错,但是会内存泄漏 claws0n 发表于 2018-10-18 11:00
没有报错不代表没有问题。你把 delete 都删了也不会报错,但是会内存泄漏
哦哦 了解了{:5_106:}
页:
[1]