我想知道是否可以配置 c++ 编译器,以便在有人设置 scoped_lock 但忘记将其分配给变量时发出警告。
请参阅以下示例:
- 案例 1.1 和案例 2.1 展示了 scoped_lock 的预期用途
- 案例 1.2 是一个错误的使用,没有创建持有者变量。它被编译器正确检测为错误(mMutex 有一个先前的声明)
- 案例 2.2 与案例 1.2 几乎相同的错误,但编译器没有检测到,也没有发出任何警告,尽管代码明显有问题,并且非常接近案例 1.2(当然互斥锁不起作用)。
请参见下面的代码,我已经使用 g++-4.8 和 Visual Studio 2010 对其进行了测试。它们都没有检测到故障案例 2.2。
有谁知道 case 2.2 编译的原因,以及为了让编译器将其检测为警告可以做些什么?
#include <boost/thread/recursive_mutex.hpp>
void Mutex1()
{
boost::recursive_mutex mMutex;
//Case 1.1 : correct mutex creation
boost::recursive_mutex::scoped_lock lock(mMutex);
//Case 1.2 : incorrect mutex creation
//==> leads to a compile error : "mMutex has a previous declaration" : perfect
boost::recursive_mutex::scoped_lock(mMutex);
}
class FooMutex
{
boost::recursive_mutex mMutex;
void TestMutex()
{
//Case 2.1 : correct mutex creation
boost::recursive_mutex::scoped_lock lock(mMutex);//compiles correctly => ok
//Case 2.2 : incorrect mutex creation
//is compiled without warning ! Ouch !!!
boost::recursive_mutex::scoped_lock(mMutex);
}
};