【发布时间】:2019-09-20 09:58:54
【问题描述】:
我正在尝试确定以下代码是否安全,或者它是否是 UB 并且仅在这种情况下运行良好(运行它here):
#include <iostream>
#include <mutex>
struct Foo
{
std::mutex mutex;
~Foo()
{
std::lock_guard<std::mutex> lock(mutex);
}
};
int main()
{
{
Foo foo;
}
std::cout << "everything seems to work fine...?" << std::endl;
}
具体来说,我们是否保证在析构函数中定义的局部变量会在成员变量之前被销毁?
我从cppreference.com 找到了以下内容,但它似乎没有完全回答我的问题:
销毁顺序
无论是用户定义的还是隐式定义的析构函数,在析构函数体执行完毕后,编译器都会为类的所有非静态非变体成员调用析构函数,按照声明的相反顺序,然后调用所有直接非虚拟基类的析构函数以相反的构造顺序(依次调用其成员及其基类的析构函数等),然后,如果该对象属于大多数派生类,则调用析构函数所有虚拟基地。
【问题讨论】:
标签: c++ multithreading destructor