提问人:Paul J. Lucas 提问时间:2/22/2014 最后编辑:Paul J. Lucas 更新时间:1/5/2017 访问量:1742
在静态对象的析构函数中使用 cout
Using cout in destructors of static objects
问:
鉴于我的代码的这个精简版本:
#include <iostream>
using namespace std;
struct S {
S( ostream &os ) : os_( os ) { }
~S() { os_ << "The end.\n"; } // line 7
ostream &os_;
};
void f() {
static S s( cout );
(void)s;
}
int main() {
f();
return 0;
}
程序打印 但是,作为较大程序的一部分,它在尝试写入 时出现 SEGFAULTS。The end.
ostream
我正在努力确保在程序终止时始终打印一些文本。我尝试使用 iostreams 做的事情合法吗?使用会更好吗?atexit(3)
我以为,因为在我使用它之前建造了它,之后它就会被摧毁;因此,目前尚不清楚为什么像上面这样的代码不应该总是有效。cout
更新
如果我将第 7 行更改为直接写入而不是通过引用,它可以正常工作。这更奇怪。cout
答:
0赞
Curious
1/5/2017
#1
如果在构造静态对象之后调用,则静态对象将在调用该对象后被销毁。所以是的,使用应该可以解决问题。atexit()
atexit()
评论
std::cout
S
cout