就是下雨了 发表于 2018-10-18 10:29:40

使用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;
}

claws0n 发表于 2018-10-18 10:45:20

第一个也有问题吧。你 new <T> 的形式,就要 delete []

就是下雨了 发表于 2018-10-18 10:55:18

claws0n 发表于 2018-10-18 10:45
第一个也有问题吧。你 new 的形式,就要 delete []

在visual studio里边运行没报错!!!

claws0n 发表于 2018-10-18 11:00:22

就是下雨了 发表于 2018-10-18 10:55
在visual studio里边运行没报错!!!

没有报错不代表没有问题。你把 delete 都删了也不会报错,但是会内存泄漏

就是下雨了 发表于 2018-10-18 11:06:58

claws0n 发表于 2018-10-18 11:00
没有报错不代表没有问题。你把 delete 都删了也不会报错,但是会内存泄漏

哦哦 了解了{:5_106:}
页: [1]
查看完整版本: 使用new分配动态数组的问题