|
해당화 님이 쓰신 글 :
: 한개의 TList에 여러 종류의 콤퍼넌트가 들어 있습니다.
: TShape , TImage , TLabel 등등..
:
: 근데 이것을 delete시켜줄때
:
: delete (TObject *)lst_Temp->Items[0];
:
: 이런식으로 해줘도 괜찮을지요..
:
: delete는 문제 없이 되지만
:
: 메모리 어딘가에 문제가 생기지 않을까 궁금합니다.
:
: 언어적으로 기초적인 밑바닥을 긁어 봐야 할거 같은데...
:
: 어떨지요?
유앤아이 현지 아빠입니다 ....
제가 알기론 문제가 없을듯 합니다 ...
반대로 생각 해보면 ...
이런 경우가 있지요~
TObject * p = (TButton *)new TButton(this);
....
delete p;
가 가능 하지요~
정확히 반대의 생각 입니다 ...
그러니 ...
님이 생각 하시는 그런 문제도 당연히 가능 한겁니다 ...
포인터라 함은 주소일 뿐입니다 ...
TButton 의 포인터가 ... TObject 의 포인터로 바뀐다구 해서 ...
그것의 주소가 바뀌는 건 아니지요~
그러니 delete 는 당연히 그 주소를 지울 뿐입니다 ...
형 변환은 ... 단순히 컴파일러의 제한상황이지 .. 절대 ... 그 언어 자체의 기능이 아닙니다 ...
일단 어떻게든 컴파일러만 속여서 컴파일만 되면 ... (컴파일이 않되는코드라도)
그다음부터 ... 원했던 되로 동작 된다라는거 잊지 마시고 상기 하십시요~~
일단 실행파일만 만들어지만 ... 지가 private 변수인지 ... public 변수 인지 알게 뭡니까 ...
기계적으로 접근만 가능하면 .. 사용 가능 한겁니다 ...
단지 프로그래머의 실수를 방지 하기 위해 ... 컴파일러가 에러라고 ... 잡아내는거라는거 ...
이거 .. 잊지 마세요~~ 상당히 의미 있는 말입니다 ...
그럼
|