Здравствуйте, Тёмчик
Вы не ответили на вопрос о том, каким боком и зачем бы приплетен паттерн Visitor.
S>> кто контролирует ее время жизни. Отвечая на этот вопрос вы и придете к необходимости возвращать (умный) указатель на реализацию интерфейса.
Тё>unsubscribe() мешает благородному дону удалить instance?
У меня пока проблема в том, чтобы разобраться с предложенным вами вариантом. Т.е. понять, что это за вариант вообще.
Пока что вырисовывается приблизительно такая картина:
template<typename T>
class SubscriptionStorage {
public:
struct Unsubscription {
virtual ~Unsubscription() = default;
virtual void unsubscribe() noexcept = 0;
};
[[nodiscard]]
Unsubscription * subscribe(T && value);
...
private:
struct Link {
virtual ~Link() = default;
Link * prev_;
Link * next_;
};
struct OneSubscription : public Link, public Unsubscription {
T payload_;
...
void unsubscribe() override {
... // Вычеркивание из списка.
delete this; // Уничтожение узла.
}
}
Link sentinel_;
};
template<typename T>
Unsubscription * SubscriptionStorage::subscribe(T && value) {
return new OneSubscription(std::move(value), ...);
}
S>>Но для этого в C++ немного понимать нужно.
Тё>Слушайте, меня конкретно уже разрывает на вашу узколобость в сочетании наскоками на моё знание C++. Вот такие представители профессии и создают негативный стереотип о C++- ках.
-- Этот ваш C++ говно и для разработки реал-тайма не применяется!
-- А ты хоть C++ знаешь?
-- Да!
-- Что такое виртуальный деструктор?
-- Какой ты токсичный! Из-за таких как вы и C++ сообщество считается токсичным!
Тё>Это не относится к действительно прокачанным программистам (как Зудин), которые в силу обстоятельств применяют C++ как инструмент.
Мне как-то фиолетово, насколько прокачанным вы считаете меня, но таки применяю C++ как инструмент. Т.к. в области интересных для меня задач до недавнего времени широко использовались только C и C++, где-то еще была Ada. Сейчас вот Rust подвезли. Но до настоящего мейнстрима Rust-у еще нужно добираться лет 5.