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
[4520] [질문] 동적생성한 Form Window 의 메모리 해제에 대해
수니 [] 3103 읽음    2000-12-04 00:00
프로그램 실행중에 필요에 따라 폼 윈도우를 프로그램 코드로 생성하는 걸 동적 생성이라고 합니다.
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 의 용도는 비슷한 것 같습니다만.. 각각 언제, 어떻게 써야할지 아리송합니다.
답변 부탁드립니다.

+ -

관련 글 리스트
4520 [질문] 동적생성한 Form Window 의 메모리 해제에 대해 수니 3103 2000/12/04
4521     Re:[질문] 동적생성한 Form Window 의 메모리 해제에 대해 박지훈.임프 3399 2000/12/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.