Сообщение Re[31]: Исповедь C++ника от 28.12.2020 1:30
Изменено 28.12.2020 1:31 Артём
Re[31]: Исповедь C++ника
Здравствуйте, 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++. Посмотрите по сторонам- долинные корпорации давно всё выложили, только используй.
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++. Посмотрите по сторонам- долинные корпорации давно всё выложили, только используй.
Re[31]: Исповедь C++ника
Здравствуйте, 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++. Посмотрите по сторонам- долинные корпорации давно всё выложили, только используй.
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++. Посмотрите по сторонам- долинные корпорации давно всё выложили, только используй.