天啊,原来我吃了这么多内存,可我还是糊涂,高手帮帮我!!

时间:2022-01-20 08:20:00
我原来以为只有自建类型的数组才这样删除,
如:
Person *ppn = new Person[100];
...
delete[] ppn;
昨天看书,发现删除所有new出来的数组内存应该这样删除
对于如int,char型的c++内建类型的数组也需要这样删除吗?

char* pstr = new char[100];
...
delete[] pstr;

7 个解决方案

#1


用new分配的内存空间要用delete收回。如果是用malloc分配的话,就要用free收回了

#2


new 用了[];
...
所以delete也用 []

#3


我确实看到说法,对内置类型调用delete不需要加[],但是官方文档中的例子是加上的。
个人认为还是加上好,自己看着也清楚。

#4


要加上,否则造成内存泄漏的。
用一些代码测试工具,会指出这种错误。

#5


我找到那段代码了(引用他人):

// String的析构函数
String::~String(void)
{
    delete [] m_data;
    // 由于m_data是内部数据类型,也可以写成 delete m_data;
}

但还是加上吧。不仅表述清晰,而且对于内置类型和自定义类型的一致性是C++追求的目标之一。

#6


我曾经做过测试,内置类型使用delete不会有任何问题,当然还是建议你使用[],养成良好的习惯

#7


多谢!

#1


用new分配的内存空间要用delete收回。如果是用malloc分配的话,就要用free收回了

#2


new 用了[];
...
所以delete也用 []

#3


我确实看到说法,对内置类型调用delete不需要加[],但是官方文档中的例子是加上的。
个人认为还是加上好,自己看着也清楚。

#4


要加上,否则造成内存泄漏的。
用一些代码测试工具,会指出这种错误。

#5


我找到那段代码了(引用他人):

// String的析构函数
String::~String(void)
{
    delete [] m_data;
    // 由于m_data是内部数据类型,也可以写成 delete m_data;
}

但还是加上吧。不仅表述清晰,而且对于内置类型和自定义类型的一致性是C++追求的目标之一。

#6


我曾经做过测试,内置类型使用delete不会有任何问题,当然还是建议你使用[],养成良好的习惯

#7


多谢!