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
[24995] Re:[질문] STL
김백일.cedar [cedar] 1126 읽음    2003-03-31 17:55
서비 님이 쓰신 글 :
: 큭.. Component 하나 만들고 있는데..
:
: STL에서 객체가 아닌 포인터를 저장하믄.. 안되겠죠.. ㅡ.ㅡ memory leak등등..
:
: new로 생성해야 하는 클래스를 List 구조로 저장하며
:
: STL 알고리즘을 사용할 수 있는 라이브러리는 없는걸까요?

표준 라이브러리에서 제공하지 않는 별도의 스마트 포인터 라이브러리를 사용하면
(표준 라이브러리는 일종의 간단한 스마트 포인터인 auto_ptr을 제공하지만,
용도가 제한적입니다. 절대로 STL 컨테이너에 저장하면 안됩니다. Effective STL의 Item 8 참고)
반드시 힙에 동적 생성해야 하는 VCL 객체도 STL 컴포넌트에서 문제없이 사용할 수 있습니다.
구하기 쉽고 추천할 만한 스마트 포인터로는 부스트 라이브러리의 shared_ptr이 있습니다.
http://boost.org/libs/smart_ptr/shared_ptr.htm 와 Effective STL의 Item 7, 33 & 50을 참고하세요.

: TObjectList나 TList를 쓰면 delete시 메모리 반환이 완벽하게 될까요?

TComponent의 자손 클래스라면 TComponentList를 쓰면 됩니다.
마찬가지로 TObject의 자손 클래스라면 TObjectList를 쓰면 되지요.
그리고 TList는 void*의 컨테이너이므로 모든 타입의 포인터를 저장할 수 있지만,
메모리 자동 해제가 되지 않습니다.
가능하게 하는 방법이 있기는 있지만, 별도의 코딩을 필요로 합니다.
델마당의 박정모님글을 참고하세요. 저도 여기서 알았죠.
http://www.delmadang.com/cwb-bin/CrazyWWWBoard.exe?mode=read&num=632&page=9&db=dmdgame&backdepth=2
참고로 토론이 아주 재미(?)있습니다. 마음의 준비를 하시길... ^^;

위의 VCL 컨테이너를 사용하면 델파이와 호환성이 있다는 장점이 있지만,
STL 알고리듬의 강력한 기능은 당연히 쓸 수 없겠죠? 역시 스마트 포인터를 쓰실 것을 권합니다.

+ -

관련 글 리스트
24993 [질문] STL 서비 734 2003/03/31
32204     Re:[질문] STL 서비 789 2003/03/31
24995     Re:[질문] STL 김백일.cedar 1126 2003/03/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.