Из того, что я помню о моей работе с потоковыми объектами.
Вы должны подумать об этом немного по-другому.
class Scanner {
public:
Scanner() {}
virtual void scan(std::istream & p_stream);
};
Ваш класс Scanner может быть просто сфокусирован на сканировании ввод для чего угодно, фактически не содержащий его.
Теперь он может быть сфокусирован исключительно на одной задаче.
Затем вам нужно решить, как лучше всего сохранить объект потока. живой. Я предлагаю отдельный класс для этой задачи.
Я бы написал это как комментарий, но здесь слишком много.