【发布时间】:2015-07-23 15:37:42
【问题描述】:
我想知道是否可以配置 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的错误案例。
有谁知道案例 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);
}
};
【问题讨论】:
标签: c++ boost boost-mutex