#c #rxcpp
Вопрос:
Хотя rxcpp::composite_subscription
у него есть метод unsubscribe
, но он не призывает его к уничтожению.
Содержит ли библиотека rxcpp класс, который автоматически вызывается unsubscribe
, когда объект выходит за пределы области видимости?
Комментарии:
1. Это слабая подписка, вам не нужно беспокоиться об отказе от подписки.
2. Не могли бы вы объяснить, пожалуйста, что такое слабая подписка?
3. 10 лет спустя, но я каким-то образом оказался здесь. Что говорит @S. M., так это то, что он действует как слабое место.
Ответ №1:
Причина, по которой подписка не вызывает unsubscribe()
свой деструктор, заключается в том, что это дескриптор отмены, а не объект RAII. объекты подписки могут быть скопированы и могут быть удалены.
Если деструктор подписки откажется от подписки, то отказ от подписки приведет к отмене работы. Это не контракт на подписку. Сохранение подписки не поддерживает работу, а отказ от подписки не останавливает и не уничтожает работу (это слабое время жизни, которое было правильно указано в комментариях).
Реальная проблема здесь в том, что rxcpp моделировал время жизни так же, как и другие библиотеки rx. Эти библиотеки используют GC для управления временем жизни.
Создается новая библиотека, в которую внесены изменения для поддержки структурированного параллелизма и срока службы, отличного от GC. Есть беседы и статьи Льюиса Бейкера и Эрика Нейблера, которые объясняют Single
форму. Прямо сейчас создается прототип классической последовательности значений rx.