|
프로그램 실행중에 필요에 따라 폼 윈도우를 프로그램 코드로 생성하는 걸 동적 생성이라고 합니다.
Form1 을 실행중에 A버튼을 써서 Form2 를 동적으로 생성했습니다.
이를 해제하기 위해서는 어떻게 해야 하나요?
void __fastcall TForm1::AClick(TObject *Sender)
{
Form2 = new TForm2( Application );
try
{
Form2->ShowModal();
}
__finally
{
delete Form2;
}
}
현재는 동적으로 생성한 모든 Form 을 delete 를 써서 해제했습니다만..
프로그램을 몇번 컴파일시키면 얼마 안가서 메모리가 full 되더군요.. 이게 아닌가벼..
Free를 써야할 듯도 싶고 Release()를 쓰는 것 같기도 하고..
Help 에서 Free 를 찾으면
Do not call the Free method of an object.
Instead, use the delete keyword, which invokes Free to destroy an object. Free automatically calls the destructor if the object instance is not NULL.
라고 나옵니다. 결국 delete 를 쓰면 free까지 자동호출되니 웬만하면 free 쓰지말고 delete 를 쓰라는 말인가요?
또한 Form2 에서 TStringList 를 new로 생성해서 썼답니다. 그러면 이 스트링리스트도 직접 메모리를 제거해줘야 하나요? 아님 Form2 의 메모리 제거시 자동으로 제거되나요?
제 생각에는 Form 과 StringList 를 각각 new 로 생성시켜 주었으니 또한 각각 메모리 해제시켜줘야하는 게 아닐까도 싶습니다.
참 아리송하군요
delete, Free, Release 의 용도는 비슷한 것 같습니다만.. 각각 언제, 어떻게 써야할지 아리송합니다.
답변 부탁드립니다.
|