加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 当抛出异常指针时,为什么我应该通过引用使用catch

发布时间:2020-12-16 09:42:18 所属栏目:百科 来源:网络整理
导读:通过引用捕获异常时,我得到的唯一好处是避免使用异常对象的副本?基本上是区别 try{ CString a_csSQL = _T("SELECT * FROM Library"); CDatabase aDB; aDB.OpenEx(g_csConnectionStringWdDSN,CDatabase::noOdbcDialog)); aDB.ExecuteSQL(a_csSQL);}catch(CDB
通过引用捕获异常时,我得到的唯一好处是避免使用异常对象的副本?基本上是区别

try
{
    CString a_csSQL = _T("SELECT * FROM Library");
    CDatabase aDB;
    aDB.OpenEx(g_csConnectionStringWdDSN,CDatabase::noOdbcDialog));
    aDB.ExecuteSQL(a_csSQL);
}
catch(CDBException *& ex)
{
    ex->Delete();
}

try
{
    CString a_csSQL = _T("SELECT * FROM Library");
    CDatabase aDB;
    aDB.OpenEx(g_csConnectionStringWdDSN,CDatabase::noOdbcDialog))
    aDB.ExecuteSQL(a_csSQL);
}
catch(CDBException * ex)
{
    ex->Delete();
}

解决方法

您发布的两个代码之间的区别在于,第一个代码通过引用捕获指向异常的指针,第二个代码通过值捕获指向异常的指针.在这两种情况下都不会复制异常,因为您正在处理指针.

通常,异常应该按值抛出,并通过引用捕获. C标准库的设计充分考虑了这一期望.但是,较旧的库(例如MFC)会像在此处一样通过指针抛出异常,并且应该被指针捕获.

按值和按引用捕获指针之间没有任何有效区别,除非您通过引用捕获,为您提供删除异常的(完全无用的)选项,使用相同的指针分配新异常,并重新抛出相同的异常 – 指针.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读