C++ 注册回调时未进行输出

C++ 注册回调时未进行输出,c++,C++,我有一个函数,当调用全局basic_ostream对象的析构函数时,它被编码为将文本输出到标准输出。我已在流上注册了此函数,但由于某些原因,它没有任何作用: void callback(std::ios_base::event evt, std::ios_base& str, int index) { if (evt == std::ios_base::erase_event) { std::cout << "Erase event";

我有一个函数,当调用全局
basic_ostream
对象的析构函数时,它被编码为将文本输出到标准输出。我已在流上注册了此函数,但由于某些原因,它没有任何作用:

void callback(std::ios_base::event evt, std::ios_base& str, int index)
{
    if (evt == std::ios_base::erase_event)
    {
        std::cout << "Erase event";
    }
}

int main()
{
    std::cout.register_callback(callback, index());
}
void回调(std::ios\u base::event evt,std::ios\u base&str,int index)
{
if(evt==std::ios\u base::erase\u事件)
{

std::cout您试图使用
std::cout
来输出文本,而
std::cout
正在被销毁?请不要告诉我这应该是可行的…

静态实例通常在主返回后被销毁:。我在该处理程序和libstdc++中放置了一个断点,如果没有显式的销毁,它们将不会被命中或者调用。我想,因为这个实例不是由您的代码“管理”的,它不仅仅是被省略的,它只是被删除。我似乎找不到一个退出处理程序,它在libstdc++中做任何事情,但是有一个较低级别的IO清理函数用于刷新。您能向我证明它不会工作吗?可能回调是在任何其他操作之前被调用的此外,文档中说析构函数没有触及底层流缓冲区,这意味着它可能会工作。
std::cout.~basic_ostream<char>(); // "Erase event"