代码之家  ›  专栏  ›  技术社区  ›  Agnel Kurian

C++/CLI:本机参考与跟踪参考

  •  2
  • Agnel Kurian  · 技术社区  · 15 年前

    以下两个功能之间有什么区别?

    ref class SomeClass;
    
    void swap(SomeClass^& a, SomeClass^& b){
        SomeClass^ c = a;
        a = b;
        b = c;
    }
    
    void swap2(SomeClass^% a, SomeClass^% b){
        SomeClass^ c = a;
        a = b;
        b = c;
    }
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   Tobias Langner    15 年前

    引用和跟踪引用之间的主要区别在于,垃圾收集允许移动跟踪引用。

    在gc运行期间,对象会四处移动。如果您在对象被其地址移动后访问该对象,您将阅读garbadge。这就是跟踪手柄的作用。它知道gc及其对象正在移动。移动对象后,仍然可以访问该对象。

    从…起 MSDN

    C++引用,指定 变量通过 参考和创建替代方案 对象的名称。但是, 跟踪对象引用的对象 用通用语言执行 运行时垃圾收集器。

        2
  •  0
  •   Guillermo Prandi    15 年前

    我的猜测是,第二种情况不能从C++/CLI外部使用(例如VB、C#等),而第一种情况可以。不过我没有试过。