На вопрос уже был дан ответ, но я хотел бы добавить, что у меня обычно есть привычка писать что-то вроде этого:
void PerformLogin()
{
ScopeLock < Lock > LoginLock( &m_LoginLock );
doLoginCommand();
{
ScopeLock < SharedMemoryBase > MemoryLock( &m_SharedMemory );
doStoreLogin();
...
}
}
На мой взгляд, это проясняет намерение (*). Это может иметь значение, если ваш код действительно полагается на конкретный порядок. Я считаю, что это снижает вероятность того, что кто-то случайно изменит порядок, и вызывает трудно обнаруживаемую ошибку. (Ну, это, конечно, не проблема, поскольку у всех нас есть тесты, не так ли?)
Я всегда пишу лишние круглые скобки в чем-то вроде (a && b) || c
, и я нахожу этот вопрос довольно похожим.
(*): Конечно, вы также можете использовать комментарий.