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

时间:2009-12-16 06:22:01

标签: .net syntax c++-cli reference-type

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

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 个答案:

答案 0 :(得分:1)

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

在gc运行期间,对象会四处移动。如果你通过它的地址移动对象后访问它,你会看到garbadge。这就是跟踪句柄的来源。它知道gc及其对象移动。移动后,您仍然可以访问该对象。

来自MSDN

  

跟踪参考类似于a   C ++引用,指定一个   变量通过传递给函数   参考并创建一个替代方案   对象的名称。然而   跟踪引用的对象   参考可以在期间移动   用共同语言执行   运行时垃圾收集器。

我不知道是否使用gc-object的引用(&)来阻止它被gc移动。

答案 1 :(得分:0)

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