윈도우즈 프로그래밍을 하게 되면 인터페이스를 사용 할 때가 있다.
현제 하고 있는 것은 탐색기의 쉘을 직접 구현 하는 것인데...
델파이의 쉘 컨트롤의 데모 소스를 보면 인터페이스를 받고 릴리즈를 하지 않는 것이였다.
분명 C나 C++이나 쉘을 받으면 Release를 시켜줘야 메모리 릭이 발생하지 않는데
이넘의 델파이의 데모 소스는 인터페이스를 수도 없이 받으면서 Release를 하지 않는것이다.
이것 때문에 직접 다 릴리즈 코드를 추가 해야 하나.. 하다 구글링을 하는 중 결정적인 글을 보았다.
----------------------------------------------------------------------
마지막에 IShellFolder 인터페이스의 인스턴스를 해제하기 위해
IShellFolder.Release를 호출해 주어야 정상이지만 델파이는 인터페이스가
그 통용범위를 벗어나면 자동으로 릴리즈를 수행하므로 필요없는 작업이
됩니다. 아니, 오히려 Release(델파이에서는 _Release)를 호출해 주면
중복 해제작업이 되어 버리므로 익셉션이 발생할 수 있습니다.
----------------------------------------------------------------------
아아.... 그런 것이였다.
데모 소스에 그 사항을 주석으로 해 놓았다면 이런 고민을 하지 않았을텐데...
이로서 델파이로 코딩하면 인터페이스를 받은 후 더이상 쓸모 없을 때
릴리즈를 깜빡하여 메모리 릭, 리소스를 긁어 먹는 일이 없다는 것을 알게 되었다 -0-;
(마치 Sun Java나 C#의 GC처럼 -0-; 그리고 관련글은 info로 옮겨 놓았다.)
[FIRST] [11] [18] [19] [20] [21] [22] [23] [24] [31] [LAST]
Comment