问一个C++new和delete的问题

2025-01-02 19:42:44
推荐回答(4个)
回答1:

delete p;可以用,但是释放不完全
delete [] p才会完整释放空间

你可以试试下面的例子,自己理解一下
class Test{
public:
Test(){printf("construct\n");}
~Test(){printf("deconstruct\n");}
};

void main()
{
Test *p;
p=(Test*)new Test[2];
delete [] p;
//delete p;
}

回答2:

int *p = new int[10];
你占用了10个位置
delete p;
这句话你只让出来了第0个位置,程序并不会因为你还占用着其他9个位置而报错,因为第一句话你告诉了系统你占用了这10个位置,第二句话告诉系统你让了一个出来,还有9个系统理所当然认为你还占用着在。为啥要报错?
delete[] p是删除数组类指针。空出所有位置。

回答3:

不报错不代表不错。 毕竟编译器也没法找出各种错, 主要还是得靠写程序的人自己注意

回答4:

这样写,编译没错,只回收了第一个堆内存,其他9个的泄漏了,还有delete后,不代表p不能用,如果你不用p,就造成了9个int内存泄漏了(即你的程序无法new到这9个内存了)直到你的这个程序关闭