大佬教程收集整理的这篇文章主要介绍了c – 如何使用消息正确创建自定义异常?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我现在拥有的是:
class LevelLoadException : public std::exception { public: LevelLoadException(std::string msg) : m_message(msg) { } const char * what () const throw () { return m_message.c_str(); } private: std::string m_message; };
在我的调用代码中,我将它作为switch语句的一部分(c是char,或者更具体地说,c = line [x];其中x是int,line是std :: string);
default: throw LevelLoadException("Invalid Character in Level: " + c);
问题是我的Exception获得了一个完全不相关的字符串(这是抛出相同方法的一部分:throw std :: exception(“在级别中有超过1个玩家开始.”)).
我已经排除了一个逻辑错误 – 我的程序到达了正确的字符串抛出正确异常的行.所以我很确定这是一个终身/内存管理问题.
根据我的理解,C默认是按值复制的.所以我认为调用LevelLoadException的ctor会立即复制字符串.但似乎有一些指针正在进行,因为我正在构建的字符串看起来像一个C字符串(const char *).
我查看了std :: exception类,这需要一个const char * const&作为消息,然后在引擎盖下做一些类似C的strcopy / malloc(MSVC / Visual Studio 2012 Update 4).
我不是百分之百确定我真正需要的东西.我想我想要的是一个在调用者中构建的字符串,然后移动/复制到Exception(它现在拥有只由异常拥有的字符串的副本)然后调用者中的那个被删除范围.
有人可以给我a pointer我应该做的不同做这件事吗?
以上是大佬教程为你收集整理的c – 如何使用消息正确创建自定义异常?全部内容,希望文章能够帮你解决c – 如何使用消息正确创建自定义异常?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。