关于TList内存释放问题?

失落的羊 2006-08-26 09:46:01
在使用控件数组的时候:

MyVCL1 = new TList;//创建Tlist对象
for(i= 0 ; i < 3;i++)
{
TGroupBox *GroupBoxNow = new TsuiGroupBox(this);
GroupBoxNow->Parent =Form1;
GroupBoxNow->Top =bTop;
GroupBoxNow->Left =bLeft +i*(bWidth +50);
GroupBoxNow->Height =bHeight;
GroupBoxNow->Width =bWidth;


MyVCL1->Add(GroupBoxNow);
}


delete MyVCL1; //删除Tlist对象

当删除Tlist对象的时候,需不需要遍历TList删除每个Item.


BCB自带的一个例子说是要:

// Clean up ?must free memory for the items as well as the list
for (int i = 0; i < MyList->Count; i++)
{
AStruct = (PAList) MyList->Items[i];
delete AStruct;
}
delete MyList;

}

...全文
320 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WhiteWaterBlueSky 2006-09-06
  • 打赏
  • 举报
回复
因为你这里new出来的GroupBox设置了Owner(即this),Owner在释放的时候会自动释放它拥有的VCL控件,所以你不去遍历释放也没问题。但是,如果你new出来的是自定义class或struct,则需要去遍历释放的。
失落的羊 2006-09-06
  • 打赏
  • 举报
回复
楼上的,好像不行喔。我delete MyVCL1; //删除Tlist对象
以后,原来的那些控件还在喔。
sea07 2006-09-06
  • 打赏
  • 举报
回复
刚刚做了一个这样的东西,必须遍历删除。
truelove7283159 2006-09-06
  • 打赏
  • 举报
回复
MyVCL1->Add(GroupBoxNow);----->GroupBoxNow你的这个没有释放。
}


delete MyVCL1; //删除Tlist对象

当删除Tlist对象的时候,需不需要遍历TList删除每个Item.


BCB自带的一个例子说是要:

// Clean up ?must free memory for the items as well as the list
for (int i = 0; i < MyList->Count; i++)
{
AStruct = (PAList) MyList->Items[i];
delete AStruct; ---〉人家释放这个了。
}
delete MyList;

}

=============================================
看BCB的帮助,就知道
list 他可以自己释放,但是他指向的data要你自己释放
shensh 2006-09-06
  • 打赏
  • 举报
回复
应该按例子中用法,遍历释放!
yinxu 2006-08-28
  • 打赏
  • 举报
回复
TList.Add方法,参数是一个指针, 你 new 了一个GroupBoxNow对象, 参数是this,那么在释放的时候,其实可以不需要遍历TList删除每个Item,因为VCL会自动释放.
但,这只是特例...
i_love_pc 2006-08-26
  • 打赏
  • 举报
回复
需要遍历TList删除每个Item

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧