您不是只为托管类创建句柄,而是在托管堆上创建托管类的实例(或对象),并且您将获得一个访问该实例的句柄。
完整的答案是一个wiki条目,但我会尝试让你知道这里的问题是什么;
- 托管与值类是C ++ / CLI(.Net)类型类。与C#和.Net相关的参考文档在这里仍然有效,可能会回答一些更微妙的问题。
- 您所说的“参考”是.Net参考。有些人将此与指针(智能指针)进行比较,这可能有助于理解某些代码,但它不是指针。
- 仅仅因为它是C ++,并不意味着通常的.Net规则不适用。混合模式允许代码跨越本机/ .Net边界,但是在本机/ .Net的任何一侧,规则仍然适用。根据经验,尝试保持这个“联系”区域小而具体有助于处理每个阵营中只有一只脚的细微差别和细微差别。
- 本质上,托管类也必须管理其所有成员,因为此数据的垃圾回收是不确定的。
- 以类似的方式,混合模式应用程序中的“本机数据”不能包含托管类(或引用)。
-
gcroot
和原始指针通常用于混合两者。 RAII类有助于管理这些元素,但可以特定于您的项目,因此一般解决方案并不总是有用。