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