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
[4521] Re:[질문] 동적생성한 Form Window 의 메모리 해제에 대해
박지훈.임프 [cbuilder] 3398 읽음    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 의 용도는 비슷한 것 같습니다만.. 각각 언제, 어떻게 써야할지 아리송합니다.
: 답변 부탁드립니다.
:


임펠리테리입니다.

delete를 쓰는 것이 맞습니다. vcl에 있는 free() 메소드는 완전히 파스칼 언어만을 위한 메소드이며, 빌더에서 c++ 코딩으로 할 때는 delete 연산자를 사용합니다. 물론 Free() 메소드를 써도 됩니다만 c++ 프로그래머가 할 짓이 아니죠. ^^;;

"메모리가 풀이 된다"고 하셨는데, 다른 문제인 것 같습니다. 좀더 구체적인 증상과 사용한 방법들을 설명하시면 더 자세한 답변을 드리는데 참고가 되겠군요.

그럼 이만..

+ -

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