13,825
社区成员
发帖
与我相关
我的任务
分享
TForm1 *pForm[10]; // User declarations , in Unit1.h
void __fastcall TForm1::Button1Click(TObject *Sender)//create and show forms
{
for(int i=0; i<10 ;++i)
{
pForm[i]= new TForm1(0);
pForm[i]->Caption ="frm"+IntToStr(i+1);
pForm[i]->Show();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)//delete forms
{
for(int i=0; i<10 ;++i)
{
delete pForm[i];
}
}
//---------------------------------------------------------------------------
/*
不行的,这个和下面是2回事情
这里是申请动态内存为6个T类型的元素数组。
然后下面通过 delete [] p 来释放申请的空间
而且必须delete [] p ; 不能是 delete p ;
T *p =new T[6] ;
// ........
delete [] p ;
//给你的代码示例是静态数组,并非是申请堆空间。
只是这些静态数组的元素都是 用来保存我们的Form对象指针(而Form对象从堆上创建)
所以delete pForm[i] 实际上这句会调用每个Form的析构函数,然后逐一释放掉每个Form对象在堆上的空间
*/