我正在尝试逆向工程并修复引发未处理异常的 Win32 控制台应用程序。
我有 32 个在线程中运行的类实例。这些“服务”线程应该每个都定期创建/删除一个唯一的 CMessage 实例,并且这些 CMessage 对象中的每一个都在 Service 类中声明为私有的。
当我在调试器中运行应用程序时(我使用的是 Visual Studio 2005),CMessage 的监视窗口指示就在调用 CMessage 成员函数之前,CMessage 的地址更改为 0x00000000 - 异常的原因。
没有直接的解释可以解释为什么会发生这种情况。前一行代码和这一行之间似乎没有发生任何不愉快的事情,所以我怀疑在某些情况下,每个线程都错误地从其他线程之一引用了 CMessage 对象(如在线程生命周期中的某个时刻 CMessage该线程的对象被删除)。
我的问题是:确保这些 CMessage 对象绝对是线程安全的并且不能从任何地方修改/删除,除了当前类范围的最佳方法是什么?我认为这就是 private 的用途,但我现在不完全确定。我想做的一件事是引用 CMessage 对象,如下所示:
this->myCMessage;
而不仅仅是:
myCMessage;
这会有什么不同吗?