自定义流缓冲区是否可以在程序退出时和请求输入时自动刷新?

时间:2013-07-08 17:20:03

标签: c++ iostream

Loki Astari提供this custom steam buffer。当从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;

但是,我希望能够自动复制程序退出或std :: cin触发的cout行为。

这是有效的(感谢Josuttis的“The C ++ Standard Library”):

    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)吗? p>

问题#2 :如何修改MyStream类,以便在程序退出时自动刷新缓冲区?

1 个答案:

答案 0 :(得分:1)

  1. 构造函数旨在在对象创建时执行操作,因此在MyStreamstd::cin.tie(this);的构造函数中建立关系是合适的。这可能会破坏cincout之间存在的任何关系,以及cin之间的另一个流类实例。
  2. 为了在程序退出时执行操作,C ++具有静态存储持续时间的对象的析构函数。