读书人

自定义错误类但是不能打印出string的信

发布时间: 2013-03-25 15:43:04 作者: rapoo

自定义异常类但是不能打印出string的信息
头文件咱就不写了。。
EEvaException.cpp:
#include "EEvaException.h"
EEvaException::EEvaException(string errorMSG,int errorCode)
{
m_errorCode = errorCode;
m_errorMSG = errorMSG;
}

EEvaException::~EEvaException(void)
{
}

EEvaException::EEvaException(EEvaException &e)
{
this->m_errorCode = e.m_errorCode;
this->m_errorMSG = e.m_errorMSG;
}

int EEvaException::getErrorCode()
{
return m_errorCode;
}

string EEvaException::getErrorMSG()
{
return m_errorMSG;
}

调用处:

try
{

EEvaException eee(string("abcd"),12225);
throw &eee;

}
catch (EEvaException *e)
{
QMLogger::logError(QObject::tr("[%1] Error: [%2]").arg(S2Q(e->getErrorMSG())).arg(e->getErrorCode(),0,16));
}



打印的时候getErrorCode是可以返回错误码的,getErrorMSG却是返回的空
这是为什么呢?string这玩意内部是怎么处理的,是不是啥时候释放掉了?
在类构造的时候断点进去m_errorMSG是有值的,但是getErrorMSG时断点进去它是空的
求指教
c++异常
[解决办法]

try
{

EEvaException eee(string("abcd"),12225);
throw &eee;//退出时会调用~string(),然后调用~EEvaException(void)
}
catch (EEvaException *e)
{
QMLogger::logError(QObject::tr("[%1] Error: [%2]").arg(S2Q(e->getErrorMSG())).arg(e->getErrorCode(),0,16));
}

[解决办法]
EEvaException eee(string("abcd"),12225);
throw &eee;
修改为
EEvaException *pee = new EEvaException(string("abcd"),12225);
throw pee;

试试?原因跟LS的说的一样,因为你是在try块里定义的一个局部异常类对象,存储在堆栈中,离开Try块之后,会自动调用析构函数释放掉那个对象。

读书人网 >C++

热点推荐