我有一个类,它在构造函数中分配一些资源并在析构函数中释放它。例如一个关键部分。我们称之为class CriticalSection
。我在一个关键的代码块的开头创建一个变量,并在结束括号中删除它:
void Worker::Work()
{
// some work goes here
....;
// the critical block
{
CriticalSection cs(aReferenceToTheLock);
// some critical work here
.....;
} // <-- destruction of cs, the lock gets released
// further unprotected code
....;
}
嗯,这就是它应该如何完成的。唉,发生了一点遗漏:
{
CriticalSection(aReferenceToTheLock);
// some work here
.....;
}
没有cs
变量名称!因此,构造函数调用会创建一个临时的匿名变量,该变量会立即被销毁,只是在分号行的分号处。并且整个街区不再受到保护。
可以检测到这种错误吗?我应该在gcc或msvc编译器中启用任何特定警告吗?