相关疑难解决方法(0)

禁止创建临时对象

在多线程应用程序中调试崩溃时,我终于在此语句中找到了问题:

CSingleLock(&m_criticalSection, TRUE);
Run Code Online (Sandbox Code Playgroud)

请注意,它正在创建一个CSingleLock类的未命名对象,因此在此语句之后,临界区对象会立即解锁.这显然不是编码员想要的.此错误是由简单的输入错误引起的.我的问题是,有些我可以防止在编译时自己创建类的临时对象,即上面的代码类型应该生成编译器错误.一般来说,我认为每当一个类尝试进行某种资源获取时,就不应该允许该类的临时对象.有没有办法强制执行呢?

c++ mfc temporary

26
推荐指数
2
解决办法
2419
查看次数

关于RAII:如何防止意外创建临时错误?

有一段时间,一位同事告诉我,他花了很多时间来调试竞争条件.罪魁祸首竟然是这样的:

void foo()
{
    ScopedLock(this->mutex); // Oops, should have been a named object.
                             // Edit: added the "this->" to fix compilation issue.
    // ....
}
Run Code Online (Sandbox Code Playgroud)

为了防止情况再次发生,他在定义ScopedLock类之后创建了以下宏:

#define ScopedLock(...) Error_You_should_create_a_named_object;
Run Code Online (Sandbox Code Playgroud)

这个补丁工作正常.

有没有人知道任何其他有趣的技术来防止这个问题?

c++

10
推荐指数
2
解决办法
703
查看次数

boost :: uuids :: random_generator线程安全吗?

考虑使用g++ -std=c++11(GCC 4.7.2)编译此函数:

boost::uuids::uuid getID()
{
    static boost::uuids::random_generator generator;
    return generator();
}
Run Code Online (Sandbox Code Playgroud)

getID从多个线程调用安全吗?

正如提到这里的局部静态对象定义在所述第一线是根据C ++ 11标准线程安全的。问题是,第二行boost::uuids::random_generator::operator()对同一对象的调用generator是否也是线程安全的。返回的UUID在单个线程中是否唯一?

c++ boost-random boost-uuid c++11 gcc4.7

6
推荐指数
1
解决办法
1937
查看次数

标签 统计

c++ ×3

boost-random ×1

boost-uuid ×1

c++11 ×1

gcc4.7 ×1

mfc ×1

temporary ×1