を解放し得ていない私は、論理的に接続アーカンソーunmangedクラスとrefクラスを持っている:C++/CLI refのクラス
public ref class RefBlah
{
~RefBlah();
!RefBlah();
internal:
UnManagedBlah* m_unmanaged;
}
public class UnManagedBlah
{
public:
gcroot<RefBlah^> refBlah;
}
RefBlahクラスは常にへの参照を保持しているUnManagedBlahのインスタンスを作成しますそれを作成したオブジェクト
RefBlahというインスタンスをC#アプリケーションで作成すると、スコープから外れると解放されません。 (私は待って、他のすべてのオブジェクトが解放されるのを見ましたが、それ自体を削除することを拒否します)。
私が知る限り、それらが両方の正規の.Netオブジェクトであった場合、参照カウントが0にならないため、クラスがスコープから外れると両方とも収集されます。メインスタックからのオブジェクト。
.NET GCは、アンマネージクラスからの参照を異なる方法で扱いますか?
RefBlahが破壊されるようにデザインを変更するにはどうすればよいですか?
ニースは、C#で弱い参照を作成できることを知りませんでした。彼らはそれを持っているだろう意味します:) –
循環参考文献は.Netにはあまり影響しません。問題は、** UnManagedBlah **は管理されていないため、CLIは参照されているオブジェクトを管理されていないコードで参照している間は解放しません。しかし、この解決方法は問題を解決しました。 –