Может ли пользовательский буфер потока автоматически очищаться при выходе из программы и при запросе ввода?
Martin York предоставляет этот пользовательский паровой буфер. Как я могу изменить класс на автоматическую очистку при чтении из cin:: cin или когда приложение существует? Например:
int main ()
{
MyStream myStream(std::cout);
myStream << "This does not print.";
}
а также
int main()
{
MyStream myStream(std::cout);
myStream << "This does not print.";
std::cin.get();
}
в то время как
std::cout << "This does print.";
а также
std::cout << "This does print.";
std::cin.get();
Если я заставлю это
myStream << "This will now print." << std::flush;
Тем не менее, я надеюсь повторить поведение cout триггера при выходе из программы или std:: cin автоматически.
Это работает (благодаря "Стандартной библиотеке C++" Джозуттиса):
MyStream myStream(std::cout);
std::cin.tie(&myStream);
myStream << "This will now print.";
std::cin.get();
так как std::cint.tie(&std::cout)
это предопределенное соединение.
Вопрос № 1: Могу ли я изменить класс MyStream, чтобы связать его с потоком cin, чтобы мне не нужно было выдавать std::cin.tie(&myStream)
каждый раз, когда я создаю экземпляр?
Вопрос № 2: Как можно изменить класс MyStream, чтобы буфер автоматически очищался при выходе из программы?
1 ответ
- Конструкторы предназначены для работы во время создания объекта, поэтому было бы целесообразно установить связь в конструкторе
MyStream
:std::cin.tie(this);
, Это, вероятно, разорвет любую связь, которая существует междуcin
а такжеcout
или междуcin
abd другой экземпляр вашего потокового класса. - Для работы при выходе из программы в C++ есть деструкторы объектов со статической продолжительностью хранения.