我有基于范围控制互斥锁定/解锁的代码:
void PerformLogin()
{
ScopeLock < Lock > LoginLock( &m_LoginLock );
doLoginCommand();
ScopeLock < SharedMemoryBase > MemoryLock( &m_SharedMemory );
doStoreLogin();
...
}
Run Code Online (Sandbox Code Playgroud)
我可以保证MemoryLock以前会被毁坏LoginLock吗?
Jar*_*Par 11
再补充Neil的答案.
考虑相反的情况是否正确,即您无法预测堆栈声明变量的析构函数的顺序.这将使得几乎不可能在堆栈上使用依赖值类型.考虑
void Foo() {
Type1 t1;
Type2 t2(&t1);
...
}
Run Code Online (Sandbox Code Playgroud)
如果C++不能保证析构函数的排序,那么像这样的直接代码将是非常不安全的,因为在t2的析构函数运行之前t1可能会被销毁.因此,您无法保证t2的析构函数以有效的t1值运行.