相互に参照するアンマネージ C++ クラスがいくつかあります。インスタンスが解放されたときにポインターがぶら下がるのを避けるために、ブースト スマート ポインター (主に shared_ptr) を使用しています。ここまでは順調ですね。
ただし、C++/CLI にもラッパーがあり、ほとんどすべてのアンマネージ クラスには、それを .NET アプリケーションに公開するための同等のマネージド クラスがあります。ラッパーは非常に単純ですが、ManagedClass から UnmanagedClass* を参照するためにアンセーフ ポインターを使用する必要がありました。Boost::shared_ptr を ManagedClass のメンバーとして使用することはできません。これは、CLR がアンマネージ型をクラス メンバー (それらへのポインターのみ) としてサポートしていないためです。
例: クラス Wheel の 4 つのインスタンスを含むクラス Car。5 つの管理されていないインスタンスのそれぞれには、5 つの管理された同等のインスタンスがあります。管理されていない車は車輪を変更する必要がある場合があり、管理されていない Wheel の 4 つのインスタンスが削除され、4 つの新しいインスタンスが作成されます。Managed Car は、Wheel の 4 つの新しいマネージド インスタンスを作成するために、新しいアンマネージド Wheel を要求します。
ただし、Wheel の 4 つの古いマネージド インスタンスはまだマネージド ワールドのスコープ内にあり、古いアンマネージド インスタンスへのダングリング ポインターが含まれています。ラッパーに相当するネイティブが破棄されたことを認識する方法はありますか? スマート ポインターを使用した簡単なタスク。それらをマネージ コードで使用できますか?