我是C的新手,我正在尝试创建一个自定义异常,它在其ctor中接收一条消息.
我现在拥有的是:
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; };@H_301_5@在我的调用代码中,我将它作为switch语句的一部分(c是char,或者更具体地说,c = line [x];其中x是int,line是std :: string);
default: throw LevelLoadException("Invalid Character in Level: " + c);@H_301_5@问题是我的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我应该做的不同做这件事吗?