在 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 而不是派生自彼此,因此以这种方式包装异常绝对不是一个好主意。