0

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

我开始知道有 2 个类:托管类和价值类。

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

问题:

  • 无法创建托管类的对象,只能创建句柄。为什么是这样?
  • 请给我一个关于实例的简要想法?它只是一个对象创建还是其他什么?
4

1 回答 1

0

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

完整的答案本身就是一个 wiki 条目,但我会尝试让您了解这里的问题是什么;

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