|
초보맨 님이 쓰신 글 :
: 멤버함수가 아닙니다...
:
: TImage *Sprite_Image; 가 링크드 리스트안에 있고 외부에 선언하였기 때문에
:
: this를 쓰니까 에러가 나더라구여...
:
: 생성자의 인자인 AOwner 포인터를 넘겨주려면 어떻게 해야하는지 죄송하지만
:
: 다시한번 답변해주시면 감사하겠습니다...
이 부분은 VCL을 처음 배울 때, 가장 중요한 개념 중에 하나입니다.
AOwner는 'Owner Relation'을 설정합니다.
예를 들어 Form1의 컴포넌트들의 Owner는 Form1이 되지요.
이 Owner Relation은 TComponent의 자손 객체들이
delete를 쓰지 않고 자동으로 삭제되는 역할을 합니다.
즉, Form1이 삭제될 때 Form1 위에 있는 컴포넌트들이 자동으로 삭제되는 것이지요.
그래서 TComponent의 자손 클래스는, Owner만 제대로 설정하면,
메모리 누수에 대해서는 걱정할 필요가 없습니다.
JAVA의 가비지 컬렉션보다도 오히려 더 좋은 기능이지요.
(가비지 컬렉션이 일어나는 시점은, 애플리케이션이 아니라 JVM이 임의로 판단해서 결정하고,
그 동안 애플리케이션이 잠깐 멈춘다고 할 수 있을 만큼 오래 걸립니다. -_-;)
VCL은 C++/Object Pascal의 단점을 잘 된 클래스 설계로 극복한 예라고 할 수 있습니다.
본론으로 돌아와서, AOwner는 TComponent* 타입이면 아무거나 됩니다.
그러니까 NULL을 TComponent*로 캐스팅하면 되죠.
이 경우는 Owner Relation이 없다는 뜻이 됩니다.
Sprite_Image = new TImage((TComponent*)NULL);
대신, 링크드 리스트가 삭제되기전에,
delete를 사용해서 미리 TImage 객체를 삭제해야 합니다.
(그렇지 않으면 엄청난 양의 메모리 누수 현상이 발생합니다!)
: 김백일 님이 쓰신 글 :
: : 초보맨 님이 쓰신 글 :
: : : 네 맞는데여...
: : :
: : : 생성자의 인자인 AOwner 포인터를 넘겨주려면 어떻게 해야하는지 잘 모르겠습니다..
: : :
: : : 다시 한번 답변해주시면 감사하겠습니다...
: :
: : TForm의
: : 멤버함수에서 호출하시는 거라면,
: : 그냥 this를 쓰시면 됩니다.
: : this는 클래스 자기 자신을 가리키는 포인터입니다.
: :
: : : 김백일 님이 쓰신 글 :
: : : : 초보맨 님이 쓰신 글 :
: : : : : 안녕하세요....
: : : : :
: : : : : 궁금한게 있어서 질문을 드립니다...
: : : : :
: : : : : TImage를 동적생성을 하려고 하는데
: : : : :
: : : : :
: : : : : TImage *Sprite_Image;
: : : :
: : : : Sprite_Image 포인터를 말씀하시는지,
: : : :
: : : : : Sprite_Image = new TImage(this);
: : : :
: : : : TImage 클래스의 생성자
: : : : TImage::TImage(TComponent* AOwner);
: : : : 의 인자인 AOwner 포인터를 말씀하시는지요?
: : : :
: : : : : this를 쓰려고 하는데 TImage의 포인터를 외부(링크드 리스트)에서 생성한후에
: : : : :
: : : : : 사용하려고 합니다..
: : : : :
: : : : : 어떻게 사용해야하는지 아시는 고수님께서 자세한 답변을 해주시면 감사하겠습니다...
: : : :
|