只能创建托管类的句柄。为什么?

时间:2014-06-06 06:37:04

标签: c++-cli visual-c++-2013

我是Visual C ++的初学者,目前只是学习它的概念。

我开始知道有两个班级:管理班和班级。价值等级。

  1. 值类就像普通的C ++类一样,可以创建保存数据的对象。
  2. 托管类是由垃圾收集器管理的内存。
  3. 问题:

    • 无法创建托管类的对象,只能创建句柄。这是为什么?
    • 请简要介绍一下实例?它只是一个对象创建还是别的什么?

1 个答案:

答案 0 :(得分:0)

您不是只为托管类创建句柄,而是在托管堆上创建托管类的实例(或对象),并且您将获得一个访问该实例的句柄。

完整的答案是一个wiki条目,但我会尝试让你知道这里的问题是什么;

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