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

mal*_*ala 0 c++

我正在努力学习C++(目前正与C合作),我正在花时间寻找互联网以获得良好的教程(也许有人对我有好的建议).

但我找不到有关错误处理标准方法的信息.

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

const int MAX = 1000;
class Example {
    public: 
       Example(int x);
    private:
       int x_val;
}
Run Code Online (Sandbox Code Playgroud)

所以我只想检查,当创建类的对象时,如果允许给定的坐标,如果它高于允许的,则中止程序?

所以在.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;
}
Run Code Online (Sandbox Code Playgroud)

Max*_*kin 5

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

因为:

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