동적으로 생성할 때 Owner 값을 해당 Form 으로 지정하면 Form 이 알아서 메모리를 해제해 줍니다.
TButtonEx 는 TButton을 상속받아 만드셨으니 자동으로 Owner 속성을 가집니다. 따라서 Form 생성자에 다음과 같이 Owner 를 Form1 로 지정해 주면 자동으로 메모리를 해제합니다.
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ButtonEx1 = new TButtonEx(this); // 'this' 대신 'Form1'이 와도 되겠죠.
}
컴포넌트의 Owner 는 Owner 자신이 메모리에서 해제될 때 자신이 가지고 있는 컴포넌트들의 메모리를 알아서 해제해 줍니다. 참고로 기본 컴포넌트들은 Builder 가 알아서 Owner 를 Form 으로 지정해 주므로 신경쓰시지 않아도 됩니다.
Owner 를 NULL 로 지정할 경우, 메모리를 직접 해제해 줘야 하는 걸로 압니다만, 확실하진 않네요...
빌더스게이트 님이 쓰신 글 :
: 안녕하세요...
:
: TButton클래스를 서브클래싱 해서 TButtonEx라는 놈을 만들었는데요...
: 저놈을 동적생성해서 사용하고 프로그램이 닫히면 다른 기본 컨트롤 콤포넌트들처럼 자동으로 해제가 되는건가요?
: 아니면 동적생성 했기때문에 프로그램 종료 부분에 제가 수동으로 delete해줘야 하는건가요?
|