rxcpp: Автоматическая отмена подписки, когда она выходит за рамки

#c #rxcpp

Вопрос:

Хотя rxcpp::composite_subscription у него есть метод unsubscribe , но он не призывает его к уничтожению.

Содержит ли библиотека rxcpp класс, который автоматически вызывается unsubscribe , когда объект выходит за пределы области видимости?

Комментарии:

1. Это слабая подписка, вам не нужно беспокоиться об отказе от подписки.

2. Не могли бы вы объяснить, пожалуйста, что такое слабая подписка?

3. 10 лет спустя, но я каким-то образом оказался здесь. Что говорит @S. M., так это то, что он действует как слабое место.

Ответ №1:

Причина, по которой подписка не вызывает unsubscribe() свой деструктор, заключается в том, что это дескриптор отмены, а не объект RAII. объекты подписки могут быть скопированы и могут быть удалены.

Если деструктор подписки откажется от подписки, то отказ от подписки приведет к отмене работы. Это не контракт на подписку. Сохранение подписки не поддерживает работу, а отказ от подписки не останавливает и не уничтожает работу (это слабое время жизни, которое было правильно указано в комментариях).

Реальная проблема здесь в том, что rxcpp моделировал время жизни так же, как и другие библиотеки rx. Эти библиотеки используют GC для управления временем жизни.

Создается новая библиотека, в которую внесены изменения для поддержки структурированного параллелизма и срока службы, отличного от GC. Есть беседы и статьи Льюиса Бейкера и Эрика Нейблера, которые объясняют Single форму. Прямо сейчас создается прототип классической последовательности значений rx.