CArray会不会造成内存泄漏?
我用CArray定入了一个数组,再把一些new出来的对象放入该数组中,再用RemoveAt 或RemoveAll 删除对象,会不会造成内存泄漏?如果会,怎样delete掉new出来的对象? 问题点数:20、回复次数:9Top
1 楼qrlvls( 空 气 )回复于 2005-05-11 15:40:34 得分 5
会,new出来的对象需要显式delete
怎样delete就不是问题了吧,根据你的实际应用可以重载CArray,用你自己的RemoveAt和RemoveAll来实现自动的delete(前提是逻辑清晰)Top
2 楼syouryou()回复于 2005-05-11 15:43:31 得分 0
把RemoveAt返回的对象delete掉就可以了。
RemoveAll的话需要一个个delete掉。Top
3 楼redclouds()回复于 2005-05-11 15:44:40 得分 0
显式delete是什么意思啊Top
4 楼orbit(走了走了)回复于 2005-05-11 16:04:32 得分 5
你说的情况CArray只是负责管理指针,至于指针指向的内存需要自己释放Top
5 楼hongyan80(鸿雁)回复于 2005-05-11 17:15:43 得分 0
那是不是不如使用CPtrArray? 这样能一眼看出是个指针数组,需要手工释放内存
那CArray又有什么用呢?Top
6 楼SoLike(思危)回复于 2005-05-11 17:37:49 得分 10
通过 new 产生的对象必须用 delete 释放。
这是MSDN 里的例子,清空一个存放指针的Array
CArray<CPerson*, CPerson*> myArray;
int i = 0;
while (i < myArray.GetSize() )
{
delete myArray.GetAt( i++ );
}
myArray.RemoveAll();
Top
7 楼SoLike(思危)回复于 2005-05-11 17:41:17 得分 0
之所以用 CArray,是因为他是一个模板类,类型上更安全Top
8 楼crusaderg(刻苦)回复于 2005-05-11 17:49:43 得分 0
MSDN有明确的说明的,remove的对象不会自动释放内存的。Top
9 楼KevinWon(Kevin)回复于 2005-05-11 17:55:50 得分 0
mark 学习Top




