gpt4 book ai didi

c++ - 删除数组时delete和delete[]是一样的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:14 24 4
gpt4 key购买 nike

<分区>

Possible Duplicates:
How could pairing new[] with delete possibly lead to memory leak only?
( POD )freeing memory : is delete[] equal to delete?

使用 gcc 版本 4.1.2 20080704(Red Hat 4.1.2-48)。还没有在 Visual C++ 上测试过它。

似乎 deletedelete [] 在删除“简单”类型的数组时效果相同。

char * a = new char[1024];
delete [] a; // the correct way. no memory leak.

char * a = new char[1024];
delete a; // the incorrect way. also NO memory leak.

但是,当删除“复杂”类型的数组时,delete 会导致内存泄漏。

class A
{
public:
int m1;
int* m2; // a pointer!
A()
{
m2 = new int[1024];
}
~A()
{
delete [] m2; // destructor won't be called when using delete
}
};
A* a = new A[1024];
delete [] a; // the correct way. no memory leak.

A* a = new A[1024];
delete a; // the incorrect way. MEMORY LEAK!!!

我的问题是:

  1. 第一个测试用例,为什么deletedelete[]在g++下是一样的?
  2. 在第二个测试用例中,为什么g++不像第一个测试用例那样处理它?<​​/li>

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com