在 Visual C++ 中不使用 "new" 抛出异常?
Throwing exceptions without using "new" in Visual C++?
我的申请中有自己的例外情况。而我这样扔的那一刻:
throw new CChristianLifeMinistryEntryException(strError);
可以理解的是,代码分析触发了这个,因为我使用了 new
。
建议我使用 make_unique
,我正在尝试确定这是否是更新此代码的正确方法。
在 C++ 中,异常通常派生自 std::exception
并按值抛出,并按引用捕获。这样你就不需要管理生命周期(不需要在处理后删除一些异常而不需要删除其他异常)。
喜欢throw std::runtime_error(str_error);
。
MFC 使用 new
抛出引用的方法早于 C++ 编译器异常支持,因此有一种方法可以抛出指针异常,但不是任意类型的异常。新码不推荐。
有一种特殊的异常智能指针叫做exception_ptr
,通常需要在线程之间传递异常,而不是包装抛出的异常。
如果用 unique_ptr
包装异常,则必须捕获它,而此 catch
将不会捕获派生的异常,因为不同的 unique_ptr
而不是派生自彼此,因此以这种方式包装异常绝对不是一个好主意。
我的申请中有自己的例外情况。而我这样扔的那一刻:
throw new CChristianLifeMinistryEntryException(strError);
可以理解的是,代码分析触发了这个,因为我使用了 new
。
建议我使用 make_unique
,我正在尝试确定这是否是更新此代码的正确方法。
在 C++ 中,异常通常派生自 std::exception
并按值抛出,并按引用捕获。这样你就不需要管理生命周期(不需要在处理后删除一些异常而不需要删除其他异常)。
喜欢throw std::runtime_error(str_error);
。
MFC 使用 new
抛出引用的方法早于 C++ 编译器异常支持,因此有一种方法可以抛出指针异常,但不是任意类型的异常。新码不推荐。
有一种特殊的异常智能指针叫做exception_ptr
,通常需要在线程之间传递异常,而不是包装抛出的异常。
如果用 unique_ptr
包装异常,则必须捕获它,而此 catch
将不会捕获派生的异常,因为不同的 unique_ptr
而不是派生自彼此,因此以这种方式包装异常绝对不是一个好主意。