C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[700] [VCL] TObjectList 에 대해...
장성호 [nasilso] 8650 읽음    2007-08-13 10:39
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할때 자동 소멸시키지 않습니다.
강재호.만해 [greenuri]   2007-08-13 11:33 X
TTypedList란 객체가 있는데요
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
이건 김태선님께서 만드신것입니다.
장성호 [nasilso]   2007-08-13 12:41 X
네...
저도 김태선님께서 만드신것 좀 써봣는데요
선언할때 class 타입 명시해주는게 귀찮아서..
잘 안써지게 되더군요

TObjectList는 그런게 없으니까..
아직 실무에 써보진 않았지만 편리할 것 같은 예감이....
외랑 [jaehuns]   2007-08-13 13:37 X
ShowMessage의 "나죽네..." 가 압권이군요.. ㅋㅋ
TohnoLyn [tohnokanna]   2007-08-19 04:41 X
TObjectList 썻다가 피본적이 있어서 =_=;;

그냥 TList 씁니다.
초보대왕 [sauron]   2007-08-28 02:59 X
음. 이런 때마다 의문인게 왜 STL 을 사용하지 않을까 하는 것입니다.
빌더 하시는 분들한테는 STL 이 찬밥인거 같습니다.

+ -

관련 글 리스트
700 [VCL] TObjectList 에 대해... 장성호 8650 2007/08/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.