Сами брекеты в порядке, все, что они делают, это ограничивают область действия, и вы ничего не замедляете.Это можно рассматривать как чище.(Всегда отдавайте предпочтение чистому коду, а не быстрому, если он чище, не беспокойтесь о скорости, пока не профилируете.)
Но в отношении ресурсов это плохая практика, потому что вы ставите себяположение для утечки ресурса.Если что-то в блоке выбрасывает или возвращает, взрыв, вы мертвы.
Используйте управление ресурсами на уровне области (SBRM, также известное как RAII), которое ограничивает ресурс областью, используя деструктор:
class mutex_lock
{
public:
mutex_lock(HANDLE pHandle) :
mHandle(pHandle)
{
//acquire resource
GetMutexLock(mHandle);
}
~mutex_lock()
{
// release resource, bound to scope
ReleaseMutexLock(mHandle);
}
private:
// resource
HANDLE mHandle;
// noncopyable
mutex_lock(const mutex_lock&);
mutex_lock& operator=(const mutex_lock&);
};
Таким образом, вы получите:
{
mutex_lock m(handle);
// brace brackets "scope" the lock,
// AUTOMATICALLY
}
Это сделает всех ресурсов, это чище и безопаснее.Если вы в состоянии сказать «Мне нужно освободить этот ресурс», вы сделали это неправильно;они должны обрабатываться автоматически.