私の理解では、 C ++ / CXはガベージコレクションを使用せず、代わりに参照カウントアプローチを使用します。
参照カウントの問題は、サイクルを破棄できないことです。サイクルは通常、標準C++のweak_ptrなどの弱参照を使用して解決されます。
しかし、C ++/CXで弱参照を明示的に指定する方法を見つけることができません。それから、これはC ++/CX自体によって処理されると思います。C ++/CXがこれをどのように解決するのか疑問に思っています。
たとえば、次のコードを見てください。
ref class Foo
{
public:
Bar^ bar;
};
ref class Bar
{
public:
Foo^ foo;
};
ref class App
{
public:
virtual void OnLaunched(LaunchActivatedEventArgs^ args)
{
Foo^ foo = ref new Foo();
Bar^ bar = ref new Bar();
foo.bar = bar;
bar.foo = foo;
}
};
C ++ / CXはこのサイクルをどのように検出しますか?
C ++ / CXはこのサイクルをどのように解決しますか?
C ++ / CXは、これらのオブジェクトのどれを「ルートオブジェクト」にし、どれを「弱参照」にするかをどのように決定しますか?