【发布时间】:2014-06-25 19:50:46
【问题描述】:
我目前正在升级工作中的项目并遇到了这个问题。
如果没有足够的空间容纳更多对象,则此代码用于引发 bad_alloc 异常:
...
else if (((_SIZT)(-1) / _Count) < sizeof (_Ty))
_THROW_NCEE(std::bad_alloc, NULL);
将此项目升级到 vs2012 ( Toolset V110 ) 时出现错误:
error C2248: 'std::bad_alloc': cannot access private member declared in calss 'std::bad_alloc'
我已经阅读了很多关于此的帖子,但他们使用不同的方法来访问此私有成员。我想知道是否有一种解决方法来抛出这个异常,我可以抛出一个不同的异常,或者访问这个私有类成员的奇特方式。
【问题讨论】:
-
如果不知道宏
_THROW_NCEE的作用,就无法回答这个问题。你代码中的每一个标识符都是reserved by for your standard library implementation -
#define _THROW_NCEE(x, y) throw x(y)这是 _THROW_NCEE 的定义...我发现其他人问过它,它一定是执行此任务的流行方式。 -
更具体地说,至少在 MSVC 2010 中,
_THROW_NCEE(x, y)定义在<xstddef>中;如果定义了_HAS_EXCEPTIONS_,则为throw x(y),否则为x(y)._Raise()。目前无法查看任何更新的版本。
标签: c++ exception visual-studio-2012 c++11