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
[68972] Re:TPopupMenu안의 MenuItem동적할당 질문드립니다...
박지훈.임프 [cbuilder] 1738 읽음    2013-01-12 13:41
아직 C++빌더의 방식에 익숙하지 않으신 것 같습니다.
C++빌더에서 모든 컴포넌트는, Owner 구조를 이용해서 자동으로 해제가 가능합니다. 그래서 명시적으로 delete를 할 필요가 없습니다.
모든 컴포넌트의 조상인 TComponent 클래스의 생성자를 보면 단 하나의 인자 Owner를 가지고 있으며, 이 Owner로 다른 컴포넌트를 지정해주면 그 컴포넌트가 현재 생성중인 컴포넌트의 메모리 해제를 책임지게 됩니다.

[VCL] Sender, Parent, this, Owner 에 대한 설명
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_faq&no=15

문경재님의 코드에서 메뉴아이템을 생성하는 코드에 보시면 new TMenuItem(Application) 이렇게 하셨으니, Application 객체를 Owner로 지정하신 것입니다. 이것은  객체가 해제될 때 이 메뉴아이템 객체가 덩달아 해제된다는 의미입니다.

폼에 속한 컴포넌트를 생성하면서 Owner로 Application을 지정한 것은 좀 적절하진 않은데요. 애플리케이션이 실행중인 상태에서 이 폼이 중간에 해제될 수도 있는데, 그렇게 되면 이 메뉴아이템은 애플리케이션이 끝날 때까지 계속 메모리를 점유하게 됩니다.

그래서 당연히, 폼에 속한 컴포넌트를 동적 생성할 때는 Owner를 폼으로 지정하는 것이 가장 일반적입니다. 반드시 Owner로 Application을 지정해야 하는 경우도 있는데요, 폼을 동적으로 생성할 때죠.

컴포넌트나 폼을 동적으로 생성할 때 이 Owner를 지정하지 않고 대신 NULL을 넘길 수도 있습니다. 그러면 짐작하시겠지만 누구도 해당 객체의 해제를 자동으로 해주지 않으므로 개발자가 직접 delete로 삭제해야 합니다.

이 Owner 방식은 자바 등의 가비지컬렉션과 좀 비슷한 효과를 갖지만, 가비지컬렉션처럼 느리지도 않고 가비지컬렉션처럼 복잡한 로직으로 동작하지도 않습니다. 심플하고 빠릅니다.



문경재 님이 쓰신 글 :
: 콤보박스에 적혀 있는 갯수만큼 메뉴아이템을 추가해야해서
:
: 콤보박스의 내용이 변경될때마다
:
: //콤보박스만큼돌면서 팝업메뉴에 넣어주기
:   for(int i = 0 ; i < AdvComboBox3->Items->Count ; i++)
:   {
:     TMenuItem * miStatus = new TMenuItem(Application);
:     miStatus->Caption = AdvComboBox3->Items->Strings[i];
:     PopupMenu1->Items->Insert(i,miStatus);
:   }
:
: 이런식으로 했는데요.
:
: 질문1. new를 했으니 어딘가에서  delete를 해줘야할것 같은데 콤보박스가 계속 바뀌어서..어디서 해줘야 할지...
:
: 질문2. 동적으로 만들어진 menuItem을 클릭했을때 이벤트를 발생시키려면 어떻게 해야하는지..
:
:
:
: 감사합니다.~

+ -

관련 글 리스트
68959 TPopupMenu안의 MenuItem동적할당 질문드립니다... 문경재 2909 2013/01/11
68973     Re:TPopupMenu안의 MenuItem동적할당 질문드립니다... 박지훈.임프 1482 2013/01/12
68972     Re:TPopupMenu안의 MenuItem동적할당 질문드립니다... 박지훈.임프 1738 2013/01/12
68991         감사합니다.~ 문경재 1312 2013/01/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.