"Close"기능이있는 스트림과 같은 클래스가 있습니다. 이 클래스의 인스턴스는 필드/속성에 저장됩니다. 때로는이 인스턴스를 새 인스턴스로 대체해야합니다. 불행히도 누군가가 여전히 객체의 이전 인스턴스를 사용하는지 알 수 없습니다. (많은 많은 함수가이 필드를 멀티 스레딩과 함께 사용합니다). 그래서 클래스를 닫지 않고 필드를 덮어 쓸 수 있습니다. GC가 닫히지 않은 객체를 제거 할 것이라고 기대할 수 있습니까? 아니면 처분 함수에서 닫을 수 있습니까?가비지 수집기가 스트림을 닫을 것으로 예상 할 수 있습니까?
감사합니다.
OP 클래스는 Stream 클래스가 결국 필요한 기본 객체에 대해 Dispose를 호출하는 것처럼 Close()를 노출 할 수 없습니다. –
@Aaron - 동의하고 아마도 _ 그럴 수 있습니다. 'dispose' 구현은 닫을 수 있어야합니다. 하지만 올바른 방법으로 코드를 사용하면 버그가 발생합니다. – Oded
불행히도, 그게 dispose 패턴이 필요합니다.GC가 메모리 이외의 관리되지 않는 리소스를 추적하는 것을 제외하고는 코드 사용자가 정리를 보장하기 위해 특별한 단계 (예 : 'using'문)를 사용하는 것을 제외하고는 관리되지 않는 리소스가 정리되도록 보장 할 수있는 방법이 없습니다. – siride