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

C++빌더 Q&A
C++Builder Programming Q&A
[20038] TList 대신 std::list를 쓰실 것을 권합니다.
김백일 [cedar] 2827 읽음    2002-07-11 22:07
양정석 님이 쓰신 글 :
: 객체가 죽어서 그렇습니다.
: 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]));
: :
: : 이렇게 하면 안되나요???

+ -

관련 글 리스트
20035 TList에서 AnsiString을 타입캐스팅 해서 void*넣었을때... 심윤수 1111 2002/07/11
20037     Re:TList에서 AnsiString을 타입캐스팅 해서 void*넣었을때... 양정석 1613 2002/07/11
20061         AnsiString만 저장한다고 하면, TStringList를 쓰세요. 김백일 1823 2002/07/12
20038         TList 대신 std::list를 쓰실 것을 권합니다. 김백일 2827 2002/07/11
20044             TList도 자동으로 메모리를 해제할 수 있습니다. 속도도 더 빠르고... (냉무) 박정모 1435 2002/07/12
20057                 Re:TList는 자동으로 메모리를 해제할 수 없습니다. 속도도 더 느리고... 김백일 1895 2002/07/12
20058                     험... 별로 할 말이 없습니다. 그럼 그렇게 알고 계속 쓰십시요. (냉무) 박정모 1168 2002/07/12
20060                         '그렇게만' 알고 계시지 말고, STL을 한 번 써보세요. 김백일 1606 2002/07/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.