自定义越轻量级C++异常类

本文详细介绍了CInterfaceException异常处理类的设计与实现。该类能够记录异常发生的行号、文件名及描述信息,并提供了定制化的内存分配与释放操作。通过示例展示了如何使用此异常类进行错误捕获与处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


/********************************************************************************.h*********************************************************************************/

class CInterfaceException
{
public:
CInterfaceException(long linenum, const char* fileName, const char* desp);
CInterfaceException(const CInterfaceException& exp);


void* operator new(size_t size);
void* operator new(size_t size, const char* filename, int linenum);
void operator delete(void* buf);
void operator delete(void* buf, const char* filename, int linenum);


long m_nLinenum;
char m_szFileName[_MAX_PATH];
char m_szDesp[512];
};


/********************************************************************************.cpp*********************************************************************************/

CInterfaceException::CInterfaceException(long linenum, const char* fileName, const char* desp)
{
m_nLinenum = linenum;
strncpy_s(m_szFileName, _countof(m_szFileName), fileName, strlen(fileName));
strncpy_s(m_szDesp, _countof(m_szDesp), desp, strlen(desp));
}


CInterfaceException::CInterfaceException(const CInterfaceException& exp)
{
m_nLinenum = exp.m_nLinenum;
strncpy_s(m_szFileName, _countof(m_szFileName), exp.m_szFileName, strlen(exp.m_szFileName));
strncpy_s(m_szDesp, _countof(m_szDesp), exp.m_szDesp, strlen(exp.m_szDesp));
}


void* CInterfaceException::operator new(size_t size)
{
return malloc(size);
}


void* CInterfaceException::operator new(size_t size, const char* filename, int linenum)
{
return _malloc_dbg(size, _NORMAL_BLOCK, filename, linenum);
}


void CInterfaceException::operator delete(void* buf)
{
free(buf);
}


void CInterfaceException::operator delete(void* buf, const char* filename, int linenum)
{
_free_dbg(buf, _NORMAL_BLOCK);
}



/********************************************************************************demo*********************************************************************************/

        try

{
/***************************************************************************/
}
catch(CInterfaceException* p)
{
cout << "line=" << p->m_nLinenum << endl << "file=" << p->m_szFileName  << endl << "desc="<< p->m_szDesp << endl;
delete p;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值