|
답변 자세하게 해주셔서 정말정말 감사합니다...
김백일 님이 쓰신 글 :
: 초보맨 님이 쓰신 글 :
: : 멤버함수가 아닙니다...
: :
: : 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의 포인터를 외부(링크드 리스트)에서 생성한후에
: : : : : :
: : : : : : 사용하려고 합니다..
: : : : : :
: : : : : : 어떻게 사용해야하는지 아시는 고수님께서 자세한 답변을 해주시면 감사하겠습니다...
: : : : :
|