实战经验:时刻关注类对象内部数据成员状态

实战经验:时刻关注类对象内部数据成员状态

----实战经验:时刻关注类对象内部数据成员状态//---- http://

实战经验:时刻关注类对象内部数据成员状态

问题

今天在追踪一个复杂逻辑错误导致的Bug时 , 花费了很多时间 , 最后发现是线程句柄重复Close导致的 。

有问题的代码

首先 , 我们考察以下类定义:

类客户代码示例如下:

在以上类定义中 , 我们可以明显看到CloseHandle被重复调用了两次 , 分别是在类成员函数Destory和类析构函数中 。 尝试对一个句柄重复调用CloseHandle , 结果是未定义的 , 一般情况下 , 在调试模式下 , 程序会崩溃并提示:invalid handle 。 在复杂的大型程序中 , 我们可能不太容易发现这种重复调用导致的Bug 。 所以 , 需要有一种方法能抵御这种类型的错误 。

推荐阅读