Q&A

  • 컴포넌트를 동적으로 생성하였을 시 메모리 누수현상에 관하여...
며칠전에 여러개 테이블에 대한 퀵레포트 생성에 대하여 질문을 했던 사람입니다.

어떻게 하는게 가장 효율적일지 몰라서...

제가 하려는 방식은 퀵레포트를 여러개 생성하여 QRConpositeReport 로 묶으려고 합니다.
여러개를 생성하는데 모든 테이블에 대해서 만들어 줄 수가 없어서
테이블에 대한 정보를 하나의 테이블로 만들었습니다.
그리고 그 테이블을 참조하여 동적으로 생성을 하려고 합니다.

각설하고... 이번에 여쭤보고 싶은것은..
컴포넌트를 동적으로 생성하였는데..
개수가 7~9 정도라서 배열로 잡고 생성하는 식으로 했습니다.
<!--CodeS-->
  private
    LabelList : array[0..10] of TQRLabel;

...

  with ADOQuery1 do begin
    Close;
    SQL.Clear;
    SQL.Add('select * from TableDesign where FormName = "'+ThisName+'" order by ID');
    Open;
    First;
    for i:=0 to RecordCount-1 do begin
      LabelList[i] := TQRLabel.Create(Self);
      LabelList[i].Parent := self.QRGHead;
      LabelList[i].Top := 0;      LabelList[i].Width := 150;
      LabelList[i].Caption := FieldByName('ColumnName').AsString;
      Next;
    end;
  end;
<!--CodeE-->
중요하다 싶은부분만 발췌했습니다.

첫번째 질문은
LabelList : array[0..10] of TQRLabel;
이 문장은 객체는 생성이 안된 포인터만 가지고 있는 배열인가요??

그렇다면
    for i:=0 to RecordCount-1 do begin
      LabelList[i] := TQRLabel.Create(Self);
이렇게 생성을 했을때 폼이 종료되면 자동으로 free가 되나요??
아니면 close 이벤트에서 free를 시켜줘야 할까요?
2  COMMENTS
  • Profile
    모영철 2005.08.22 18:30
    첫번째..

    LabelList : array[0..10] of TQRLabel;

    네 맞습니다. 포인터만 선언된 상태지요..

    두번째..

    LabelList[i] := TQRLabel.Create(Self);

    네 그것도 맞습니다. self가 자기 자신을 가르키는 거니깐 해당폼이 또는 객체가

    소멸할때 하위의 것도 소멸합니다.편하죠..


  • Profile
    채규봉 2005.08.23 01:38
    아 감사합니다.
    따로 안해줘도 된다니 정말 편하네요. ^^
    몹시 기쁩니다. ^_^