处理简单的cpp类构造函数中的错误

时间:2018-10-05 16:20:55

标签: c++

我正在尝试学习C ++(当前正在使用C),并且我花时间在Internet上寻找良好的教程(也许有人对我有很好的建议)。

但是我找不到有关错误处理的标准方式的信息。

所以可以说我有一个像这样的简单类(我的example.h文件):

const int MAX = 1000;
class Example {
    public: 
       Example(int x);
    private:
       int x_val;
}

所以我只想检查创建示例类的对象时,是否允许给定坐标,以及坐标是否高于允许值,是否中止程序?

因此在.cpp文件中:

Example::Example(int x){

   /*So is it common, to do something like this:*/
   if (x >= MAX){
       std::cerr << "Error while generating example object" << std::endl;
       return 0;
   }

   /*or is this more convenient:*/
   throw std::invalid_argument( "received to high value" );

   x_val = x;
}

1 个答案:

答案 0 :(得分:5)

当构造函数失败时,抛出异常。

因为:

  • 拥有未正确初始化的对象没有任何意义。
  • 不可能意外地忽略异常(与错误代码或日志消息不同)。
  • 您要么具有正确初始化的对象,要么根本没有对象。简单而强大。
  • 析构函数不需要处理部分初始化的对象破坏,这可能根本不可能,因为未初始化的成员可能具有不确定的值。当构造函数引发异常时,不会调用析构函数(尽管已初始化成员和基类的析构函数将以相反的顺序调用)。