使用c ++ CLI,是否建议不要将跟踪句柄用于值类?
例如
value class Point {
};
点p; 或点^ p;
答案 0 :(得分:2)
C ++ / CLI允许该语法,遗憾的是,它无法直接在其他托管语言中表达。最终得到一个对象中的值,并将其存储在GC堆上。每个作业都会打包,读取值再次将其取消装箱。这是相当昂贵的,99.9%的时间是错误的。值的类型是使代码快速,避免通过对象引用的额外间接并利用处理器寄存器。像Point这样的值类型值适合两个寄存器。
通过将其声明为句柄,您会遇到ref class
但添加的缺点,即每次检索值类型的成员时都必须取消装箱值。因此完全没有意义,如果你需要一个带引用类型语义的Point类,那么只需声明一个ref class Point
并完全避免un / boxing成本。 C ++ / CLI有一些设计缺陷,通过尝试使其与本机C ++语义匹配而引发。这是其中之一。
所以不,不建议这样做。