【发布时间】:2010-09-17 20:32:43
【问题描述】:
我正在为 MFC 应用程序开发一个大型、老化的代码库。随着时间的推移,许多开发人员已经对代码进行了研究,因此,我们在整个代码中采用了三种不同的方式来处理 new 分配失败的可能性。
第一种方法是在 new 的结果上测试 NULL。我们不使用 nothrownew.obj,所以这显然是一个需要清理的错误。
第二个是捕获CMemoryException*(是的,编译器中启用了C++异常)。据我了解,MFC 覆盖了标准运算符 new,而是抛出了这个东西。我相当肯定第二种方法在 MFC 应用程序本身中是正确的。 MFC 用其奇怪的 CMemoryException 抛出版本覆盖 new。
最后一个来自我们的基础,他们擅长 C++,但不一定是 MFC 程序员。他们正在捕获 const std::bad_alloc&。
我真的不知道链接到应用程序的静态库会发生什么。这是使用 bad_alloc 生命的绝大多数代码。假设这些库不是用 MFC 或 ATL 编译的,并且只用标准 C++ 编写,他们能期望捕获 bad_alloc 吗?或者它们链接的应用程序中是否存在 MFC 会用全局 new 运算符感染它们,并使它们的尝试完全失败,因为分配错误没有实际意义?
如果你有答案,你能解释一下这是如何工作的,或者给我指出正确的参考来解决这个问题吗?
【问题讨论】: