|
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 해주어야 하나요?
만약, 그렇다면 소멸자는 언제 어떤식으로 호출해주어야 하나요?
만약, 그렇지 않다면 소멸자는 언제 호출되어서 메모리를 해제하나요?
궁금합니다.
고수님들의 답변 부탁드립니다.
|