我们可以使用值类的跟踪句柄吗?

时间:2013-11-30 13:56:35

标签: c++-cli

使用c ++ CLI,是否建议不要将跟踪句柄用于值类?

例如

value class Point {
};

点p; 或点^ p;

1 个答案:

答案 0 :(得分:2)

C ++ / CLI允许该语法,遗憾的是,它无法直接在其他托管语言中表达。最终得到一个对象中的值,并将其存储在GC堆上。每个作业都会打包,读取值再次将其取消装箱。这是相当昂贵的,99.9%的时间是错误的。值的类型是使代码快速,避免通过对象引用的额外间接并利用处理器寄存器。像Point这样的值类型值适合两个寄存器。

通过将其声明为句柄,您会遇到ref class添加的缺点,即每次检索值类型的成员时都必须取消装箱值。因此完全没有意义,如果你需要一个带引用类型语义的Point类,那么只需声明一个ref class Point并完全避免un / boxing成本。 C ++ / CLI有一些设计缺陷,通过尝试使其与本机C ++语义匹配而引发。这是其中之一。

所以不,不建议这样做。