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
[3849] Re:[질문]TreeView에서 Node를 AddObject로 추가 했을 때
박지훈.임프 [cbuilder] 3594 읽음    2000-07-29 00:00
이영수 님이 쓰신 글 :
: TreeView에서 Node를 AddObject로 추가 했을 때
: 그 Node를 삭제하려고 하면...보통 delete를 쓰는데...
: 그러면 함께 포함된 Object 어디로 가나요..???
: 아직 메모리에 남아 있는 건지...
: 만약 남아 있다면 어케 제거 해야 돼죠???
: 보통 AddObject로 Object를 찐겨 놓으려면 그 Object를 new 명령으로 생성하는데...
: 알수 없네요..!! 좀 갈켜 주세요!!
:
:


임펠리테리입니다.

TList에서와 비슷한 경우라고 볼 수 있습니다. 물론 TList에서의 아이템들은 void * 형이므로 TObject * 형인 TreeView 의 Object와는 다르긴 합니다만, 결국은 그런 포인터의 형과는 다른 실질적인 포인터형들을 보관하게 된다는 점에서는 비슷하죠.

논리적으로 생각해보면 간단합니다. 원래 타입과는 다른 타입의 포인터가 가리키는 객체를 깨끗이(clearly) 객체를 파괴하려면 그 정확한 형을 알아낸후 캐스팅을 해서 파괴해야 합니다. delete (원래타입)object; 이런 식으로 해야 원래 클래스의 destructor가 정상적으로 호출되어 cleanup이 됩니다.

그런데 TreeView에서 AddObject()로 추가한 노드는 스스로 추가된 object가 실제로 어떤 형인지 알수가 없습니다. 그러므로 TreeView가 알아서 파괴해줄 수가 없겠지요? 결국 AddObject()로 노드에 Object가 추가된 경우 그 노드를 파괴하기 전에 먼저 그 object 포인터를 원래 클래스 타입(코딩한 사람은 알겠지요?)으로 강제 캐스팅을 한 후 파괴하고, 그 다음에 그 노드 자체를 파괴해야 합니다.

그럼 참고하시길...

+ -

관련 글 리스트
3848 [질문]TreeView에서 Node를 AddObject로 추가 했을 때 이영수 3214 2000/07/29
3849     Re:[질문]TreeView에서 Node를 AddObject로 추가 했을 때 박지훈.임프 3594 2000/07/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.