class C
{
public:
C() {}
~C()
{
std::cout << "delete c" << std::endl;
}
};
class CallData
{
public:
struct B
{
~B()
{
std::cout << CallData::q << std::endl;
delete CallData::q;
}
};
static thread_local C *q;
static thread_local B b;
};
thread_local C *CallData::q = new C;
thread_local CallData::B CallData::b;
void fun1()
{
std::cout << CallData::q << std::endl;
CallData::b;
}
int main()
{
std::thread t1(fun1);
t1.join();
std::cin.get();
return 0;
}
靜態成員的析構順序是否是后定義的物件先析構。
如果是 那么我使用后定義的b物件讓它的解構式 釋放掉q的記憶體應該是安全的吧?
第二問
thread_local CallData::B CallData::b;
thread_local C *CallData::q = new C;
我還試著下更換了它們定義的順序。發現也可以釋放掉q的記憶體。
但這應該是不安全的對吧?q的指標值沒有被直接銷毀。所以可以delete掉。也許有些編譯器會直接把指標的值抹去
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/205157.html
標籤:C++ 語言
