〜运算符在此代码中有什么用途?

Ahm*_*mad 2 c# swig

我已经深入挖掘了SWIG为Quantlib生成的C#代码,并遇到了以下代码,这给了我一个谦卑的时刻.

每个生成的类都实现IDisposable,并且每个生成的类都具有下面指出的这个约定.

public class MultiPath : IDisposable { // MultiPath is interchangable
  private HandleRef swigCPtr;
  protected bool swigCMemOwn;

  internal MultiPath(IntPtr cPtr, bool cMemoryOwn) {
    swigCMemOwn = cMemoryOwn;
    swigCPtr = new HandleRef(this, cPtr);
  }

  internal static HandleRef getCPtr(MultiPath obj) {
    return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  }

  ~MultiPath() { // <---- 
    Dispose();
  }

  public virtual void Dispose() {
    lock(this) {
      if (swigCPtr.Handle != IntPtr.Zero) {
        if (swigCMemOwn) {
          swigCMemOwn = false;
          NQuantLibcPINVOKE.delete_MultiPath(swigCPtr);
        }
        swigCPtr = new HandleRef(null, IntPtr.Zero);
      }
      GC.SuppressFinalize(this);
    }
  }
  // snip
}
Run Code Online (Sandbox Code Playgroud)

如果我正确读取这个,则按位补码运算符应用于类的构造函数,所以我的问题是

  1. ~在这个例子中,为什么运营商的目的是什么?
  2. 它有什么影响?
  3. 使用这种操作员和技术的正确情况是什么?

编辑:

为了清楚起见,~这种情况称为析构函数.谢谢@Arcturus.

Arc*_*rus 8

它是析构函数!

简单来说,析构函数是一个实现破坏类实例所需操作的成员.析构函数启用运行时系统,恢复堆空间,终止与删除的类实例关联的文件I/O,或执行这两个操作.

  • 可能是析构函数? (3认同)
  • 解构器将是一段代码,对类的社会意义进行Derridean分析;)开玩笑说,我更喜欢称它们为"终结者",因为"析构者"经常会导致人们从C++那里带来心理上的包袱真正相关(Managed C++有终结器和析构器,前者与上面的C#代码相对应). (3认同)