出力パラメータとして使用するためにC#からC++/CLIへの参照渡しの配列を渡しています。次のように私のコードは次のとおりです。C++/CLI、C#混在コードでのガベージコレクション
C#
ushort[] a = new ushort[1];
cppclr.method(ref a);
C++/CLI
void method(array<ushort>^% a)
{
a = gcnew array<ushort>(5);
a[0] = 1;
a[1] = 2;
a[2] = 3;
}
コードは罰金コンパイルし、エラーを生成しません。しかし、私はC#で作成した配列がガベージコレクションによって処理されたかどうか混乱していますか?私の混乱は、私がC++/CLIの中に新しいメモリを割り当てているので、以前の参照が失われ、ガベージコレクションによって処理されるはずです。プログラムはメモリリークを表示しません。私はこの状況を他の方法で処理する必要がありますか?
を私はあなたが.NET( 'gcnew')とないアンマネージコードを使用してメモリを割り当てている、GCは作業を行うと思います。私は100%確実ではない。 – null
@null C++/CLIの中で 'gcnew'を使ってメモリを割り当てていて、その参照が保持されています。私はC#newによって作成されたメモリがメモリリークを引き起こすかどうか混乱していますか? – ubaabd
は、.NETで作成されているので、GCがそれを処理するので、私は正しかったようです。これは、CLIとアンマネージタイプでは別の話です。 – null