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
[57990] Re:Re:동적생성한 클래스 해제시...
장성호 [nasilso] 1056 읽음    2009-08-10 11:12
VCL 컴포넌트에서는 Owner와 Parent에 대해 잘 알 필요가 있습니다.

아래 링크에 잘 설명되어있는데요..
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=38

간단히 설명하면
컴포넌트를 동적 생성하더라도 
생성시에 Owner를 정해주면 Owner가 free될때 같이 동적생성한 컴포넌트도 free가 되구요

컨트롤인경우 Owner가 없더라도
parent가 있는 상태에서 parent가 free되면 그 위에 있는 control은 모두 free됩니다.

즉 님처럼 버튼에 Owner를 정해주지 않고  create했다하더라도  버튼의 parent ( 폼이나 패널 등..)이 있으면
해당 parent가 free될따 알아서 버튼이 free되죠

그럼..


소중한꿈 님이 쓰신 글 :
: 동적으로 생성할 때 Owner 값을 해당 Form 으로 지정하면 Form 이 알아서 메모리를 해제해 줍니다.
:
: TButtonEx 는 TButton을 상속받아 만드셨으니 자동으로 Owner 속성을 가집니다. 따라서 Form 생성자에 다음과 같이 Owner 를 Form1 로 지정해 주면 자동으로 메모리를 해제합니다.
:
:
: __fastcall TForm1::TForm1(TComponent* Owner)
: 	: TForm(Owner)
: {
: 	ButtonEx1  = new TButtonEx(this);    // 'this' 대신 'Form1'이 와도 되겠죠.
: }
: 

:
: 컴포넌트의 Owner 는 Owner 자신이 메모리에서 해제될 때 자신이 가지고 있는 컴포넌트들의 메모리를 알아서 해제해 줍니다. 참고로 기본 컴포넌트들은 Builder 가 알아서 Owner 를 Form 으로 지정해 주므로 신경쓰시지 않아도 됩니다.
:
: Owner 를 NULL 로 지정할 경우, 메모리를 직접 해제해 줘야 하는 걸로 압니다만, 확실하진 않네요...
:
: 빌더스게이트 님이 쓰신 글 :
: : 안녕하세요...
: :
: : TButton클래스를 서브클래싱 해서 TButtonEx라는 놈을 만들었는데요...
: : 저놈을 동적생성해서 사용하고 프로그램이 닫히면 다른 기본 컨트롤 콤포넌트들처럼 자동으로 해제가 되는건가요?
: : 아니면 동적생성 했기때문에 프로그램 종료 부분에 제가 수동으로 delete해줘야 하는건가요?

+ -

관련 글 리스트
57962 동적생성한 클래스 해제시... 빌더스게이트 1088 2009/08/06
57967     Re:동적생성한 클래스 해제시... 아제나 1229 2009/08/07
57965     Re:동적생성한 클래스 해제시... 소중한꿈 1147 2009/08/06
57990         Re:Re:동적생성한 클래스 해제시... 장성호 1056 2009/08/10
57999             Re:Re:Re:동적생성한 클래스 해제시... 소중한꿈 1214 2009/08/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.