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
[5148] Re:동적으로 생선된 툴버턴의 삭제.... -> dynamic_cast 연산의 제한 조건
박지훈.임프 [cbuilder] 3198 읽음    2001-02-03 19:36
궁금이 님이 쓰신 글 :
: ToolBar에서 동적으로 생성한 TooButton을 삭제할 방법이 없을까요...???
:
: 실행중에 ToolBar에 생성된 버턴을 모두 지우고 다시 생성 할려는데
: 않되요.....
: {
:         int i ;
:         unsigned item , temp = 1;
:
:         TToolButton *NewButton;
:         TIniFile *MyConfig;
:
: /* 요부분이 말썽입니다.......................
:         while(MyButtonList->Count)
:         {
:                 delete dynamic_cast<TToolButton*>(MyButtonList->Items[0]);
:                 MyButtonList->Delete(0);
:         }
: */
:
:
:         MyConfig = new TIniFile(ChangeFileExt("MyConfig,".INI"));
:         item  = MyConfig->ReadInteger("ToolBar" , "Item" , 0x0007);
:
:         for(i = 31 ; i >= 0 ; i--)
:         {
:                 if(temp<<(i) & item)
:                 {
:                         NewButton = new TToolButton(ToolBar2);
:                         NewButton->Parent = ToolBar2;
:                         NewButton->ImageIndex = i;
:                         NewButton->Action = ActionList1->Actions[i];
:                         MyButtonList->Add(NewButton);
:                 }
:         }
:         delete MyConfig;
: }


임펠리테리입니다.

원인은 간단합니다. dynamic_cast는 void * 형 포인터에 적용할 수 없습니다. dynamic_cast는 내부적으로 RTTI를 이용하므로 피연산자는 반드시 클래스 정보를 갖는 클래스, 즉 TObject를 상속받는 클래스여야 합니다.

보여주신 소스에서는, 제가 보기에는 MyButtonList 리스트객체에는 툴버튼 외에 다른 객체를 넣을 일이 없어보이므로 굳이 dynamic_cast 연산을 하지 않고 C/C++ 표준 캐스팅을 해도 무방합니다. 다음과 같이 말이죠.
delete (TToolButton*)MyButtonList->Items[0];

그리고 dynamic_cast를 쓸 필요가 없는 경우라면 표준 캐스팅을 하는 것이 훨씬 빠릅니다. dynamic_cast 연산은 상당히 속도가 느린 연산이니까요.

그럼 참고하시길...

+ -

관련 글 리스트
5147 동적으로 생선된 툴버턴의 삭제.... 궁금이 2628 2001/02/03
5148     Re:동적으로 생선된 툴버턴의 삭제.... -> dynamic_cast 연산의 제한 조건 박지훈.임프 3198 2001/02/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.