-1

我在 MyRefClass.h 中声明了一个类

public ref class MyRefClass{
....
....
};

这三个对象的分配和管理位置/方式有什么区别?

//  This is allocated in **C++/CLI**.
MyRefClass ^mrc = gcnew MyRefClass();
MyRefClass *mrc2 = new MyRefClass;

// If allocated in **C#**
MyRefClass mrc3 = new MyRefClass()

如果这是一个太愚蠢的问题,请原谅我。我是 C# 和 C++/CLI 的新手。

4

1 回答 1

1

带有 new 的第二行是错误的并且不会编译,如果它是一个非托管类,即使语法也是错误的。您必须声明一个指针以接收 new 运算符的结果。

简而言之:

托管对象(参考类)必须使用 gcnew 分配。托管对象位于 .NET 托管堆上,由垃圾收集器释放。这样的类/对象可以很容易地在 .NET 世界中的所有语言之间共享。

非托管对象(类)必须用 new 分配。它们必须通过删除来释放。这些对象存在于正常的进程堆上。

于 2018-06-28T06:30:15.590 回答