C —“ throw new BadConversion(“ xxx”)”和“ throw BadConversion(“ xxx”)”之间的区别

// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html
class BadConversion : public std::runtime_error {
 public:
   BadConversion(std::string const& s)
     : std::runtime_error(s)
     { }
 };

 inline std::string stringify(double x)
 {
   std::ostringstream o;
   if (!(o << x))
     throw BadConversion("stringify(double)");
     // throw new BadConversion("stringify(double)");
   return o.str();
 } 

[Q1]当我们在函数中引发异常时,throw new ClassName()和throw ClassName()有什么区别?

[Q2]哪个更好?

谢谢

最佳答案
[A1]使用throw new时,您必须捕获一个指针.在这种情况下,该语言没有指定负责分配的人员,因此您必须建立自己的约定(通常需要使捕获程序负责).如果没有新内容,您将希望参考引用.

[A2]如果您使用的框架通常会抛出指针,那么您可能希望效仿.否则,扔没有新的东西.另请参见C++ FAQ, item 17.14.

转载注明原文:C —“ throw new BadConversion(“ xxx”)”和“ throw BadConversion(“ xxx”)”之间的区别 - 代码日志