|
양정석 님이 쓰신 글 :
: 객체가 죽어서 그렇습니다.
: TList는 객체의 포인터(void*)를 유지하는 것입니다. 객체는 다른곳에 살아 있어야 합니다.
:
: AnsiString temp;에서 temp라는 객체는 함수가 끝나면 사라 지죠.
: 그래서 Items[0]은 객체는 없는 빈곳을 가리키고 있는 것입니다.
: 그래서 주로 쓸때는
: 이렇게 많이 씁니다.
: TList* List = new TList;
: char *pr;
: pr = new char[30];
: strcpy(pr,"hi");
: List->Add(pr); 이렇게 해도 될듯합니다.
:
: 나중에 delete하는거 잊지 마시구요.
:
: 아님
:
: TList* List = new TList;
: AnsiString *temp;
: temp = new AnsiString;
: *temp = "hi";
List->Add(temp);
을 해서 삽입하는 코드를 빼먹으셨네요.
: 이런식으로 되려나? 안해봐서 모르겠지만
: 처음 말씀 드린 이유는 맞습니당.
: 즐프하세요. 제 질문에도 답해 주세요.
보이드 포인터(void*)만을 저장하는 TList는
항상 new 객체를 생성한 후,
사용할 때는 원래의 타입으로 캐스팅해야 하고,
삭제하기 전에 delete로 삭제해야 하는 번거로움이 있습니다.
실수하면 메모리 릭을 발생시키는 버그를 범하기 쉽지요.
TList 보다는 ANSI C++ STL의 list 컨테이너를 사용하실 것을 권합니다.
std::list<AnsiString> StringList;
StringList.push_back("hi");
로 하면 삽입이 끝납니다.
삭제도 간단해서,
StringList.remove("hi");
라고 쓰면 되지요.
: 심윤수 님이 쓰신 글 :
: : TList *List = new TList;
: : AnsiString temp = "hi";
: :
: : List->Add(&temp);
: :
: : 이렇게 넣었을때
: :
: : 빼낼려구 하는데 자꾸 안빠지네요..ㅠ.ㅜ
: :
: : AnsiString dest;
: : dest = *((AnsiString*)(List->Items[0]));
: :
: : 이렇게 하면 안되나요???
|