【问题标题】:When exception class in c++ initialized?c++中的异常类什么时候初始化?
【发布时间】:2020-10-01 23:36:18
【问题描述】:
#include <iostream>
#include <exception>
using namespace std;

struct MyException : public exception {
   const char * what () const throw () {
      return "C++ Exception";
   }
};

int main() {
   try {
      throw MyException();
   } catch(MyException& e) {
      std::cout << "MyException caught" << std::endl;
      std::cout << e.what() << std::endl;
   } catch(std::exception& e) {
           //Other errors
   }
}

在上面的程序中,MyException 类的初始化是在catch 函数参数中完成的,catch(MyException&amp; e) 并且初始化也可以在没有&amp; 符号的情况下完成。 我怀疑是在使用&amp; 时真正创建了 MyException 类的对象吗?这里有什么诀窍?

【问题讨论】:

  • 不,MyException 是在throw MyException(); 行构造的。只抓住你,你知道,抓住它。也许您将“初始化”与“声明”混淆了?

标签: c++ class c++11 object exception


【解决方案1】:

初始化发生在这里:

 throw MyException();

因为您正在创建 MyException 类的新实例...

匿名实例(该对象未分配给您声明的任何变量),但有一点是您的类的构造函数被调用并因此初始化。

【讨论】:

    【解决方案2】:

    异常类没有什么特别之处。它们只是类。是的,它们旨在用于传达异常信息,但任何类型都可以用于此目的。所以不要纠结于异常代码本身;它与创建对象的时间无关。 return MyException(); 将创建 MyException 类型的对象。 throw MyException();也是如此。

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多