首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当抛出异常指针时,为什么要使用按引用捕获

当抛出异常指针时,为什么要使用按引用捕获
EN

Stack Overflow用户
提问于 2013-02-02 04:49:16
回答 2查看 1.6K关注 0票数 3

当通过引用捕获异常时,我得到的唯一好处是避免复制异常对象?基本上,两者的区别

代码语言:javascript
复制
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();
}

代码语言:javascript
复制
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();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-02 04:56:47

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

一般而言,异常应该通过值抛出,并通过引用捕获。C++标准库在设计时就考虑到了这一点。然而,较老的库(例如MFC)会像这里一样通过指针抛出异常,并且预期会被指针捕获。

通过值捕获指针和通过引用捕获指针之间没有有效的区别,除了通过引用捕获给您提供了删除异常、分配具有相同指针的新异常以及重新抛出相同异常指针的选项(完全无用)之外。

票数 7
EN

Stack Overflow用户

发布于 2013-02-02 04:57:25

如果异常是由指针抛出的,则可以避免使用引用。

如果异常是通过值抛出的,那么引用确实是必需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14654752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档