在xmemory代码中深深抛出C ++异常

时间:2012-02-14 22:01:53

标签: c++ exception

调用向量的push_back方法时会抛出C ++异常。在调试器中,似乎异常在xmemory文件中被抛出。这是我看到异常发生的地方:

// TEMPLATE FUNCTION _Destroy
template<class _Ty> inline
void _Destroy(_Ty _FARQ *_Ptr)
{   // destroy object at _Ptr
    _DESTRUCTOR(_Ty, _Ptr);
}

它似乎不是bad_alloc异常,因为我尝试使用bad_alloc catch处理程序将代码包装在try-catch中。代码在那里做了那一步。它总是进入(...)catch处理程序。如果它不是bad_alloc异常,那么可能会发生什么?

1 个答案:

答案 0 :(得分:0)

xmemory标头是标准C ++库的Dinkumware实现的实现细节(例如,使用MSVC ++发布)。实际错误不太可能与此特定功能相关。我不知道宏_DESTRUCTOR扩展到什么(使用你可以找到的-E或/ E编译器标志),但它肯定会调用相关类型的析构函数。我会看看这个宏抛出的异常,或者检查我的析构函数是否会抛出异常。另外,为了更好地处理异常,请尝试捕获std::exception const&,因为建议抛出的每个异常都来自此类型。对于标准C ++库抛出的所有异常,这绝对是正确的。但是,某些系统因未定义的行为而导致异常,这些行为可能不是来自std::exception(例如,当您的代码最终释放多次内存时)。不遵循这个从std::exception派生的建议会让调试异常变得更加困难。当您发现std::exception const&时,您可以使用what()的{​​{1}}成员来了解它的作用。