Из моего понимания С++/CX не использует сбор мусора, вместо этого использует подсчет ссылок.
Проблема с подсчетом ссылок заключается в том, что он не может избавиться от циклов. Циклы обычно решаются с использованием слабых ссылок, таких как weak_ptr в стандартном С++.
Но я не могу найти способ в С++/CX явно указать слабую ссылку. Из этого я бы предположил, что это обрабатывается самим С++/CX. Мне интересно, как С++/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;
}
};
Как С++/CX обнаруживает этот цикл?
Как С++/CX разрешает этот цикл?
Как С++/CX решает, какой из этих объектов должен быть "корневым объектом", а какой должен быть "слабая ссылка"?