プログラムの終了時にスレッドが自己終了できるように、すべてのスレッドがまだ実行されていることを定期的にチェックする必要があります。1つを除くすべての場合、これは状態変数をチェックするだけの問題ですが、最後のスレッドはユーザー対話スレッドであり、そのループはユーザー入力を無期限に待機し、ユーザーが命令を入力したときにのみ状態変数をチェックします。この時点で、プログラムは実行されていないときにクラスが正しく動作できないため、とにかく失敗します。ただし、理想的には、この点に到達したくないのです。
可能であれば、getlineのタイムアウトが最善の解決策だと思いますが、それが不可能または適切なオプションである場合は、スレッドを適切に終了できるオプションを利用できます。
余談ですが、std::getlineについて多くの言及があります。getlineは、名前空間を使用するかどうかに関係なく機能するようです。一方は他方のエイリアスであり、どちらを使用するのが適切ですか?