gpt4 book ai didi

c++ - 为什么在抛出异常指针时我应该使用引用捕获

转载 作者:太空狗 更新时间:2023-10-29 20:15:01 25 4
gpt4 key购买 nike

当通过引用捕获异常时,我获得的唯一优势是避免创建异常对象的拷贝?基本区别

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();
}

最佳答案

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

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

按值和按引用捕获指针之间没有有效的区别,除非你按引用捕获,这给你删除异常的(完全无用的)选项,分配一个新的异常相同的指针,并重新抛出相同的异常指针。

关于c++ - 为什么在抛出异常指针时我应该使用引用捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14654752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com