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
[35513] Re:Re:Re:[질문]Form이 닫힐때의 메모리 관련 질문입니다.
초보짱 [skyb612] 922 읽음    2004-06-10 09:12
먼저 답변 감사드립니다.
그런데 만약에
form1은 메인폼이고 최초에 생성되고 난 후 프로그램이 종료될때까지 죽을 일이 없고
form2는 Dialog로써 메이폼이 떠 있는 한 몇 번이고 다시 띄울 수 있다고 하면
그리고form2를 전역에 두지 않고 띄울 때마다 동적생성해서 띄운다면
띄우고 나서 반드시 메모리 해제를 해야 되잖아요?
그럴경우는 어떻게 되는 건가요?

Builder MySelf 님이 쓰신 글 :
: : 초보짱 님이 쓰신 글 :
: : : TForm1을 하나 만들고 그 위에다가 버튼을 하나 올리구요.
: : : 버튼을 누르면 새로운 Form2가 뜨도록 했습니다.
: : : Form2는 BorderStyle이 bsDialog입니다.
: : : 그리고 Form2에는 버튼과 몇개의 VCL 컴포넌트만 올렸죠.
: : : 다음은 Form1의 버튼이 Click되었을 때의 코딩입니다.
: : : (물론 Form2의 임의의 버튼의 ModalResult를 mrOk로 설정해두었습니다.)
: : :
: : : 01: void __fastcall TForm1::Button1Click(TObject *Sender)
: : : 02: {
: : : 03:     TForm2 *form2 = new TForm2(this);
: : : 04:     int result = form2->ShowModal();
: : : 05:     if (result == mrOk) {
: : : 06:         MessageDlg("OK", mtWarning, TMsgDlgButtons() << mbOK, 0);
: : : 07:     }
: : : 08:
: : : 09:     delete form2;
: : : 10: }
: : :
: : : <질문 1>
: : : 09번째 line이 없는 경우 Form2의 소멸자는 구현되어 있지 않고,
: : : 09번째 line이 있는 경우 Form2의 소멸자에서 명시적으로
: : : Form2에 있는 모든 컴포넌트들을 delete했습니다.
: : : 그러나 두 경우 다 Form2가 닫힌 후에도 메모리가 해제되지 않았습니다.
: : : 왜 그런가요?
: : :
: : : <질문 2>
: : : Form위에 동적생성하지 않은 컴포넌트들을 소멸자나 Close()등에서
: : : 명시적으로 delete 해주어야 하나요?
: : : 만약, 그렇다면 소멸자는 언제 어떤식으로 호출해주어야 하나요?
: : : 만약, 그렇지 않다면 소멸자는 언제 호출되어서 메모리를 해제하나요?
: : :
: : : 궁금합니다.
: : : 고수님들의 답변 부탁드립니다.
: : :
:
: 1번답... form2의 오우너가 form1 이므로 form1이 죽으면 자동으로 form2도 죽습니다. 그땐 delete form2하지 않아도 죽습니다. 메모리도 안샙니다.(소멸자 호출) 고로 form2안에있는 여러 컴포넌트도 form2가 죽어야 죽습니다. 즉, form1을 종료하시면 정상적으로 모든 컴포넌트들은 죽습니다. - option에 form 메뉴를 보시면 new 로 생성하지 않아도 자동으로 생성 시킬수도 있습니다. - 비추...
:
: 2번답... 1번을 잘 읽어 보시면 아실겁니다. owner관계가 성립된 컴포넌트들을 위 처럼 form1이 죽을때 죽이는게 아니라 그 전에 죽여야만 할 경우에는 delete해주셔야 합니다.


+ -

관련 글 리스트
35498 [질문]Form이 닫힐때의 메모리 관련 질문입니다. 초보짱 914 2004/06/09
35502     Re:[질문]Form이 닫힐때의 메모리 관련 질문입니다. 김상면 1152 2004/06/09
35514         Re:Re:[질문]Form이 닫힐때의 메모리 관련 질문입니다. 초보짱 1123 2004/06/10
35505         Re:Re:[질문]Form이 닫힐때의 메모리 관련 질문입니다. Builder MySelf 1501 2004/06/09
35513             Re:Re:Re:[질문]Form이 닫힐때의 메모리 관련 질문입니다. 초보짱 922 2004/06/10
35521                 Re:Re:Re:Re:[질문]Form이 닫힐때의 메모리 관련 질문입니다. Builder MySelf 921 2004/06/10
35515                 Re:Re:Re:Re:[질문]Form이 닫힐때의 메모리 관련 질문입니다. 김성연 865 2004/06/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.