在视觉C++中不使用"new"引发异常?



在我的应用程序中有我自己的异常。当我像这样把它扔出去的那一刻:

throw new CChristianLifeMinistryEntryException(strError);

可以理解的是,代码分析触发了这一点,因为我使用了new

它建议我使用make_unique,我试图确定这是否是更新此代码的正确方法。

在c++中异常通常是从std::exception派生出来的,通过值抛出,通过引用捕获。这样你就不需要管理生命周期(不需要在处理后删除一些异常而不删除其他异常)。

Likethrow std::runtime_error(str_error);

MFC使用new抛出引用的方法早于c++编译器异常支持,因此有一种抛出指针异常的方法,但不是任意类型的异常。对于新代码,不建议使用

。异常有一个特殊的智能指针叫做exception_ptr,它通常需要在线程之间传递异常,而不是包装被抛出的异常。

如果你用unique_ptr包装一个异常,你必须捕获它,而这个catch不会捕获派生的异常,因为不同的unique_ptr并不是彼此派生的,所以以这种方式包装异常绝对不是一个好主意。

相关内容

  • 没有找到相关文章

最新更新