解密MFC中异常处理

在MFC中异常处理机制有两种:

  • C++异常,在MFC3.0或者以后的版本才可用
  • MFC异常宏,在MFC1.0或者以后的版本可用


如果你要用MFC,编写一个新应用程序,你应该使用C++异常机制,如果你现有的应用程序已近使用了MFC异常宏,你可以继续使用MFC异常宏。当然,你也可以用C++异常代替已有的MFC异常宏。


采用C++异常代替MFC异常宏优点:

  • 使用C++异常,编写的代码生成的模块(EXE,DLL)更小
  • C++异常关键字非常通用,它能处理任何异常类型(int,float,char 等等),而MFC异常宏仅能处理CException类和继承于CException的类

MFC异常宏和C++异常最大的区别是,当异常被捕获后,MFC异常宏会自动的delete掉捕获的异常,C++异常需要你手动的delete掉捕获的异常。

  • MFC异常宏

			TRY
			{
				// Execute some code that might throw an exception.
				AfxThrowUserException();
			}
			CATCH( CException, e)
			{
				// Handle the exception here.
				if (m_bThrowExceptionAgain)
					THROW_LAST();
				
				// 没必要删除e.

			}
			END_CATCH


  • C++异常

			try
			{
				// Execute some code that might throw an exception.
				AfxThrowUserException();
			}
			catch( CException* e )
			{
				// Handle the exception here.
				// "e" contains information about the exception.
				if (m_bThrowExceptionAgain)
					throw; // Do not delete e
				else 
					e->Delete();//删除e,否侧引起内存泄露
			}


MFC异常宏,TRY, CATCH, AND_CATCH, END_CATCH, THROWTHROW_LAST;C++异常关键字,try,catch,throw;用C++异常代替MFC异常宏,两者之间的替换如下:

TRY   (Replace it with try)

CATCH   (Replace it with catch)

AND_CATCH   (Replace it with catch)

END_CATCH   (Delete it)

THROW   (Replace it with throw)

THROW_LAST   (Replace it with throw)



P.S以上内容是参考MSDN2008所写。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值