在多线程应用程序中调试崩溃时,我终于在此语句中找到了问题:
CSingleLock(&m_criticalSection, TRUE);
Run Code Online (Sandbox Code Playgroud)
请注意,它正在创建一个CSingleLock类的未命名对象,因此在此语句之后,临界区对象会立即解锁.这显然不是编码员想要的.此错误是由简单的输入错误引起的.我的问题是,有些我可以防止在编译时自己创建类的临时对象,即上面的代码类型应该生成编译器错误.一般来说,我认为每当一个类尝试进行某种资源获取时,就不应该允许该类的临时对象.有没有办法强制执行呢?
我有一个ScopedLock类可以帮助在超出范围时自动释放锁定.但问题是:有时团队成员会编写无效的锁码,例如
{
ScopedLock(mutex); // anonymous
xxx;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是错误的,因为ScopedLock对象是立即构造和销毁的,因此无法锁定预期的区域(xxx).我希望编译器在尝试编译此类代码时出错.可以这样做吗?
我搜索了g++警告选项,但找不到合适的警告选项.