代码之家  ›  专栏  ›  技术社区  ›  Ahmad

~运算符在该代码中有什么用途?

  •  2
  • Ahmad  · 技术社区  · 14 年前

    我仔细研究了swigforquantlib生成的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
    }
    

    bitwise complement operator 应用于类的构造函数,所以我的问题是

    1. 为什么 ~ 本例中的运算符?
    2. 有什么效果?
    3. 使用这种操作和技术的正确情况是什么?

    编辑:

    为了清楚起见 这个案子叫做 Destructor

    5 回复  |  直到 8 年前
        1
  •  8
  •   Murph    14 年前

    是的 destructor !

    简单来说,析构函数就是 执行操作的成员 需要销毁的实例 班级。析构函数使 运行时系统,以恢复堆 空间,以终止文件I/O,即 与删除的类关联 实例,或两者都执行 操作。

        2
  •  2
  •   Jonathan Allen    14 年前

    它是“Finalize”的缩写,这是一种非公开的方法 可以

    我强调“可能”这个词。除非你做一些愚蠢的事情比如打电话GC.等待终结器NET并没有向您保证它将实际清理非托管资源,如指针和数据库连接。这只是一个额外的保护层,以防你的代码搞砸了。

    注意这条线 GC.SuppressFinalize(this);

        3
  •  1
  •   Eugene Cheverda    14 年前

    它标记类的析构函数。跟随 Destructors (C# Programming Guide)

        4
  •  1
  •   Oded    14 年前

    它意味着 destructor

    析构函数用于销毁类的实例。

    它们在C中使用不多,因为托管资源由垃圾收集器负责。

        5
  •  1
  •   kartheek    14 年前