这个程序:
#include <iostream>
struct Foo {
Foo() {
std::cout << "Foo()\n";
}
~Foo() {
std::cout << "~Foo()\n";
}
};
struct Bar {
Bar() {
std::cout << "Bar()\n";
}
~Bar() {
std::cout << "~Bar()\n";
thread_local Foo foo;
}
};
Bar bar;
int main() {
return 0;
}
打印
Bar()
~Bar()
Foo()
针对我的情况(GCC 6.1,Linux,x86-64),~Foo()从未被调用。这是否是预期行为?
libc++abi
的一部分(特别是__cxa_thread_atexit()
),想知道是否需要处理这种情况。 - Tavian Barnescout
在foo
之前被销毁了。尝试从Foo
的析构函数中抛出异常,看看是否会调用std::terminate
。 - Baum mit Augen~Foo
没有被调用(也许正如Tavian所说,它是libc/C++ std lib的一个函数,而不是主要的编译器)。 - Brian Cain