Can you guarantee destructor order when objects are declared on a stack?

后端 未结 5 701
-上瘾入骨i
-上瘾入骨i 2021-02-12 14:34

I have code that controls a mutex lock/unlock based on scope:

void PerformLogin()
{
    ScopeLock < Lock > LoginLock( &m_LoginLock );

    doLoginComma         


        
5条回答
  •  我寻月下人不归
    2021-02-12 15:00

    The question was answered already, but I'd like to add that I typically have a habit of writing something like this:

    void PerformLogin()
    {
        ScopeLock < Lock > LoginLock( &m_LoginLock );
        doLoginCommand();
    
        {
            ScopeLock < SharedMemoryBase > MemoryLock( &m_SharedMemory );
            doStoreLogin();
            ...
        }
    }
    

    In my opinion, this makes the intent clearer (*). That might be relevant if your code really is relying on the specific order. I find that this makes it less likely that someone accidentally changes the order, and causes a hard-to-find bug. (Well, that is of course a non-issue, since we all have tests in place, don't we?)

    I always write the redundant parentheses in something like  (a && b) || c  too, and I find this matter quite similar.

    (*): Of course, you could use a comment as well.

提交回复
热议问题