Re[31]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 28.12.20 01:30
Оценка:
Здравствуйте, so5team, Вы писали:

S>Вот в этом случае, КМК, не будет проблем с временами жизни. Пока живет хотя бы одна подписка, остается живым объект SubscriptionStorage::Internals. Следовательно, деструкторы Subscription могут спокойно вычеркивать себя из списка подписок даже если сам объект SubscriptionStorage прекратил свое существование. С другой стороны, если все объекты Subscription разрушаются до того, как умрет SubscriptionStorage, то вообще никаких проблем: ссылка на SubscriptionStorage::Internals останется только у SubscriptionStorage и этот Internals умрет сразу вслед за SubscriptionStorage.


Да просто используй std::unique_ptr с кастомным Deleter.
На самом деле, этот геморрой с хранением Subscription и последующим удалением не нужен при использовании Observable из ReactiveX: там есть оператор takeUntil. Везде в во все цепочки подписок вставить takeUntil(onDestroy$). onDestroy$ — это Subject, который один раз вызывает onDestroy$.next(); onDestroy$.close(), и все подписки магичеким образом само-разрушаются.

S>Для уничтожения подписки достаточно просто "потерять" SubscriptionHandle. Или явно вызвать для него reset.


S>С другой строны, если SubscriptionHandle нигде не сохранить, то подписка исчезнет сразу же после создания.

Вы явно не работали с событийной моделью, или варитесь в каком-то собственном мирке. Что в общем неудивительно, учитывая, какую мизерную долю рынка сейчас занимает C++. Посмотрите по сторонам- долинные корпорации давно всё выложили, только используй.
Отредактировано 28.12.2020 1:31 Артём . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.