只能为托管类创建句柄.为什么



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

我才知道有两个班:管理班&值类。

  1. 值类就像普通的c++类,可以创建对象来保存数据。
  2. 托管类是由垃圾收集器管理的内存。

问题:

  • 不能创建托管类的对象,只能创建句柄。为什么会这样?
  • 请给我一个简单的例子?它只是一个对象创建还是别的什么?

您不仅可以为托管类创建句柄,托管类的实例(或对象)是在托管堆上创建的,并且您可以获得访问该实例的句柄。

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

    管理类与值类是c++/CLI (. net)类型类。关于c#和。net的参考文档在这里仍然有效,可能会回答一些更微妙的问题。
  • 你所说的"引用"是一个。net引用。有些人把它比作指针(智能指针),这可能有助于理解一些代码,但它不是指针。
  • 仅仅因为它是c++,并不意味着通常的。net规则不适用。混合模式允许代码跨本机/。网边界,但两边都是原生/。分别,规则仍然适用。从我的经验来看,当你试图涉足每个阵营时,尽量保持这个"接触"区域小而具体有助于处理微妙和细微差别。从本质上讲,托管类必须管理它的所有成员,因为这些数据的垃圾收集是不确定的。
  • 同样,混合模式应用程序中的"原生数据"不能包含托管类(或引用)。
  • gcroot和raw指针一般用于混合两者。RAII类帮助管理这些元素,但可以特定于您的项目,所以一般的解决方案并不总是有用的。

最新更新