我目前正在升级工作中的项目并遇到了这个问题。
此代码用于在没有足够空间容纳更多对象时通过以下方式抛出 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/