IDispose와 Document에서 제안하는 사용법

Link : https://docs.microsoft.com/ko-kr/dotnet/standard/garbage-collection/implementing-dispose

C#에서 class의 destruct 방법을 찾아보다가 찾게 되었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
class BaseClass : IDisposable
{
   // Flag: Has Dispose already been called?
   bool disposed = false;
   // Public implementation of Dispose pattern callable by consumers.
   public void Dispose()
   {
      Dispose(true);
      GC.SuppressFinalize(this);
   }
   // Protected implementation of Dispose pattern.
   protected virtual void Dispose(bool disposing)
   {
      if (disposed)
         return;
      if (disposing) {
         // Free any other managed objects here.
         //
      }
      // Free any unmanaged objects here.
      //
      disposed = true;
   }
   ~BaseClass()
   {
      Dispose(false);
   }
}
cs

 

소멸자가 불리는 경우 managed object의 경우에는 GC에서 콜렉팅 되도록 내버려 두는데, 이는 아마도 소멸자가 불리는 경우가 GC에 의해 콜렉팅 된 경우라고 가정하고 해당 클래스 내부의 managed object들도 이미 GC에 잡혀 있기 때문에 소멸자가 불린 시점에서 정리를 해주게 되면 GC가 이미 정리된 부분들에 접근하게 되므로 문제가 생기거나 이중처리로 인한 지연을 고려하여 이렇게 구현한 것이라 생각된다.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s