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

一个同事一个同事告诉我,他花了很多时间调试竞争条件.罪魁祸首原来是这样的:
void foo()
{
    ScopedLock(this->mutex); // Oops,should have been a named object.
                             // Edit: added the "this->" to fix compilation issue.
    // ....
}

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

#define ScopedLock(...) Error_You_should_create_a_named_object;

这个补丁工作正常.

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

解决方法

如果你要定义一个宏,我可能会想定义一个宏:
#define GET_ScopED_LOCK(name,mtx) ScopedLock name(mtx)

并停止创建除宏之外的对象.

然后如果有帮助,将ScopedLock重命名为ThisClassNameShouldNotAppearInUserCode.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...