class Object 관리를 어떻게 하시나요?
저는 대부분 TList를 이용하고있습니다. 가끔 TStringList를 이용하는경우도 있구요
그런데 오늘 알게됬습니다.
TObjectList 라는게 있다는것을 .... 쩝쩝...
TObjectList는 TList를 상속 받습니다.
거의 TList와 거의 비슷한데... 핵심적으로 다른것은
TObjectList 가 delete될때 list에 add된 모든 object들을 delete해준다는것입니다.
참조 :
http://www.delmadang.com/community/bbs_view.asp?bbsNo=3&bbsCat=43&indx=195094
TList를 사용할때는
매번 폼이나 프로젝트 종료시 FormDestroy 나 관련 함수에서
TList에 있는 Object를 하나하나 꺼내서 delete해줬는데....
TObjectList 를 사용하면 list만 delete하면 list에 add된 Object는 모두 같이 Delete되네요
마치 Form에 올려진 Control들 처럼...
아래는 TObjectList를 이용해 Object의 생성과 소멸을 테스트 해본 코드입니다.
//===================================================================
class TMyObject : public TObject
{
private:
int iNum;
public:
__fastcall TMyObject(int i){iNum=i;};
__fastcall ~TMyObject(){ShowMessage("나죽네..."+IntToStr(iNum));};
};
TObjectList *ObjLst;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ObjLst=new TObjectList;
for(int i=0;i<10;i++)
{
TMyObject *mobj=new TMyObject(i);
ObjLst->Add(mobj);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
delete ObjLst; //List에 add된 모든 Object들이 자동 파괴된다.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(ObjLst->Count)
{
ObjLst->Delete(0); // List에서 Delete할때 자동 free된다.
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
TMyObject *mb=(TMyObject *)ObjLst->Items[0];
delete mb; //이미 삭제(free) 됬는데..
ObjLst->Delete(0); //또다시 삭제하면 access violation이 난다.
}
//---------------------------------------------------------------------------
TObjectList 말고 Object 소멸을 자동으로해주는 다른 방법은 없나요?
그럼 즐플....
[추신] - 09-11-11
TObjectList에 담긴 객체를 자동 free되지 않게 하려면..
TObjectList에 OwnsObjects라는 property가 있습니다.
이 property를 false로 해주면 list에 담긴 object를 list를 clear할때 자동 소멸시키지 않습니다.
|
Template를 이용해서 TList에 Add시 Template으로 정의된 객체를 추가 시키는 리스트입니다.
이 생성자 옵션에 Type, 자동삭제 여부를 지정할수 있는데요
template을 이용해서 그런지 조금 무겁습니다. ^^
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=495
이건 제가 bcbDev에서 찾은 것이고요
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=component&no=474
이건 김태선님께서 만드신것입니다.