为什么在异常中没有创建对象?

时间:2012-08-20 01:26:18

标签: c++

我正在尝试理解我的C ++类的异常,并且我对这个程序有一些我不了解的东西。为什么在异常中没有创建对象?为什么只提供类名和参数?

此处:throw( testing ("testing this message"));

#include <iostream>
#include <string>
#include <stdexcept>

using namespace std;


class testing: public runtime_error
{
public:
  testing(const string &message)
    :runtime_error(message) {}
};

int main()
{
  try {
    throw( testing ("testing this message"));
  }
  catch (runtime_error &exception) {
    cerr << exception.what() << endl;
  }
  return 0;
}

1 个答案:

答案 0 :(得分:4)

您正在创建一个临时testing对象。我知道语法看起来有点滑稽,因为它没有命名。你期望看到testing myObj("Testing this message");,但如果没有变量名,你得到的就是同样的东西。

testing构造函数中放置一个断点,你会发现你真的在创建一个对象。它在您创建它的范围内没有名称。

你可以在很多地方(throw s,return和作为函数的参数)执行此操作...

return std::vector<int>(); // return an empty vector of ints

func(MyClass(1, 2, 3)); // passing `func` a `MyClass` constructed with the arguments 1, 2, and 3