以下两个功能有什么区别?
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;
}
答案 0 :(得分:1)
引用和跟踪引用之间的主要区别在于,允许通过垃圾回收移动跟踪引用。
在gc运行期间,对象会四处移动。如果你通过它的地址移动对象后访问它,你会看到garbadge。这就是跟踪句柄的来源。它知道gc及其对象移动。移动后,您仍然可以访问该对象。
来自MSDN:
跟踪参考类似于a C ++引用,指定一个 变量通过传递给函数 参考并创建一个替代方案 对象的名称。然而 跟踪引用的对象 参考可以在期间移动 用共同语言执行 运行时垃圾收集器。
我不知道是否使用gc-object的引用(&)来阻止它被gc移动。
答案 1 :(得分:0)
我的猜测是第二种情况不能在C ++ / CLI之外使用(例如VB,C#等),而第一种情况则可以。不过我没试过。