2013-04-18 1 views

답변

8

예 열거자를 해제해야합니다. 누구든지 GetEnumerator에게 전화하는 사람은 그것이 무엇을 반환하는지 소유하고 있습니다.

루프는 for/in 루프 일 때 컴파일러에서 코드를 작성하고 열거 자 개체가 삭제되도록합니다. 당신이 그것을 부를 때, 열거자를 처분하는 것이 당신의 임무입니다.

사실 이것은 매우 쉬운 질문입니다. 단순히 GetEnumerator을 호출하고 Free에 실패한 프로그램을 작성하십시오. 메모리 관리자의 기능을 사용하여 객체 유출 여부를 확인하십시오.

uses 
    System.Generics.Collections; 

begin 
    ReportMemoryLeaksOnShutdown := True; 
    with TList<Integer>.Create do 
    begin 
    GetEnumerator; 
    Free; 
    end; 
end. 

는 그리고 이것은 다음 누출 보고서 결과 :

예기치 않은 메모리 누수가 발생했습니다. 예기치 소 블록 누출은 :

  • 13-20 바이트 : TList.TEnumerator X 1
관련 문제