比方说,我有两个本地对象。 当函数返回时,它是保证哪一个走出去的范围的第一?
例如:
我有这样一个类:
class MutexLock
{
/* Automatic unlocking when MutexLock leaves a scope */
public:
MutexLock (Mutex &m) { M.lock(); }
~MutexLock(Mutex &m) { M.unlock(); }
};
这是用于走出去的范围时自动释放互斥锁一个很常见的伎俩。 但是,如果我需要在域内的两个互斥?
void *func(void *arg)
{
MutexLock m1;
MutexLock m2;
do_work();
} // m1 and m2 will get unlocked here. But in what order? m1 first or m2 first?
这真的不能造成任何死锁。 但也有可能是在释放资源的顺序可能是对用户有用的实例。 在这种情况下是重要的是明确的,而不是依靠析构函数?
此外,可以通过破坏在任何情况下,编译器被延迟? 我的意思是
func()
{
{
foo f();
} ---------> Can compiler choose to not destroy f here, rather do it at the time when func() is returning.
}