smart_ptr는 참조 카운트입니다. 이를 통해 코드에서 더 이상 참조되지 않을 때 리소스를 결정적으로 릴리스 할 수는 있지만 자신의 문제가 있습니다. 참조를 지정하면 카운터가 항상 업데이트되어야하며 순환 참조가 자동으로 해제되어 메모리 누수가 발생하고 메모리 관리자가 더 자주 호출됩니다.
.NET의 GC는 포괄적 인 수집기입니다. 메모리가 해제되어야한다고 생각할 때 (일반적으로 메모리 사용 조건에 의해 트리거되지만 결정적이지는 않음) 시스템에서 모든 활성 참조 목록을 작성하여 시작합니다 (CPU 레지스터, 중첩 참조 등 포함).). 이것은 포인터 연산 등을 할 수없는 관리 환경에 있기 때문에 가능합니다. 시스템은 모든 참조를 추적 할 수 있습니다. 라이브 참조 목록이 작성되면 기본적으로 더 이상 사용되지 않는 모든 메모리가 해제됩니다. 물론 이것은 단지 기본적인 스케치 일뿐입니다. 관리되지 않는 리소스의 효율성과 관리를 위해서는 개체 생성, 종결 자 등이 더 있습니다.하지만 작동 원리에 대한 기본적인 이해에는 중요하지 않습니다.
IDisposable 인터페이스는 일회용 패턴을 구현하는 데 사용되며 결정적 방식으로 처리해야하는 개체로 작업 할 때 유용합니다. 이 패턴은 개체가 더 이상 필요하지 않을 때 Dispose()가 명시 적으로 호출되므로 관리되지 않는 리소스를 해제하거나 핸들 등을 닫을 수는 있지만 메모리를 해제하지는 않습니다. 이것은 GC에 의해 나중에 수행 될 것이지만, 결정적 릴리스의 자원이 이미 수행 되었기 때문에 나중에 발생하는 것은 중요하지 않습니다.
+1입니다. 확실하게이 질문이 벌써 물었다라고 확신한다 :) –
나는 당신에게 무엇이라도 처분 할 필요가 없다고 말하고 있냐? –
당신이하지 않더라도 리소스가 결국 해제됩니다 (즉, IDisposable을 올바르게 구현 한 경우). 실제로 이는 안전망에 불과합니다. 가능한 한 빨리 관리되지 않는 리소스를 해제하려고합니다. –