c++ - _THROW_NCEE (std::bad_alloc, NULL) --- C++11

标签 c++ exception visual-studio-2012 c++11

我目前正在升级工作中的项目并遇到了这个问题。

此代码用于在没有足够空间容纳更多对象时通过以下方式抛出 bad_alloc 异常:

    ...
else if (((_SIZT)(-1) / _Count) < sizeof (_Ty))
    _THROW_NCEE(std::bad_alloc, NULL);

将此项目升级到 vs2012 ( Toolset V110 ) 时出现错误:

错误 C2248:“std::bad_alloc”:无法访问在 calss“std::bad_alloc”中声明的私有(private)成员

我已经阅读了很多关于此的帖子,但他们使用不同的方法来访问此私有(private)成员。我想知道是否有抛出此异常的解决方法、我可以抛出的不同异常或访问此私有(private)类成员的奇特方法。

最佳答案

问题出在 _THROW_NCEE 宏中,它坚持使用指针参数构造异常。作为explained in this answer , std::bad_alloc 是从 const char * 构造的,这从来都不是标准的,并且在 Visual C++ 2012 中被删除了。

要解决此问题,只需将 _THROW_NCEE(std::bad_alloc, NULL) 替换为 throw std::bad_alloc()

关于c++ - _THROW_NCEE (std::bad_alloc, NULL) --- C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24417336/

相关文章:

c++ - 使用宏迭代生成函数声明

c++ - 返回序列中子序列的最大可能总和的算法

java - 我们能否在发生异常的try block 中获取LineNumber和ColumnNumber

python 尝试: except: pass; on multi line try statements

c# - 是否有可能不中断某些异常的执行流程但中断其他异常 - 如果是这样,如何?

c# - Azure SDK 2.2升级破坏了SDK 2.0解决方案

c++ - 使用散列访问将许多键值对快速插入 berkeley db

c++ - "const T &arg"与 "T arg"

c# - 在 C# 中加载 XML 文件路径

c# - 显示项目集合时忽略 DebuggerDisplay