uba*_*abd 3 c# garbage-collection c++-cli
我通过引用将数组从 C# 传递到 C++/CLI 以用作输出参数。我的代码如下:
C#
ushort[] a = new ushort[1];
cppclr.method(ref a);
Run Code Online (Sandbox Code Playgroud)
C++/CLI
void method(array<ushort>^% a)
{
a = gcnew array<ushort>(5);
a[0] = 1;
a[1] = 2;
a[2] = 3;
}
Run Code Online (Sandbox Code Playgroud)
该代码编译良好并且不会产生任何错误。但是,我很困惑我在 C# 中创建的数组是否已被垃圾回收处理?我的困惑是,由于我在 C++/CLI 中分配了新的内存,因此之前的引用丢失了,应该通过垃圾回收来处理。该程序没有显示任何内存泄漏。我需要以其他方式处理这种情况吗?
一切都在照顾之中。无论您运行的是 C#、C++/CLI 还是任何其他 .NET 语言,在幕后执行这两种语言的运行时都是相同的。因此,两者都会得到相同的 GC。
正如您所使用的gcnew,您使用了运行时的托管内存分配器。如果您new在 C++/CLI 中使用非托管数组,则必须delete[]随后使用运算符释放它。