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

标签 c++

我正在尝试学习 C++(目前正在使用 C),并且我正在花时间在互联网上搜索好的教程(也许有人对我有很好的建议)。

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

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

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

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

所以在 .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;
}

最佳答案

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

因为:

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

关于c++ - 在简单的 cpp 类构造函数中处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52669732/

相关文章:

c++ - 继承类中的 shared_from_this() 类型错误(是否有 dyn.type-aware 共享指针?)

c++ - 将源文件类型更改为 Objective-C++ 后的链接器错误

c++ - CMake 错误 : Unable to find package GTest

c++ - 如何在任何类中使用 Objects form main? C++

c++ - 将 shared_ptr<Base> 向下转换为 shared_ptr<Derived>?

c++ - 结构中的默认值(字符)

C++ 模板 : Partial Template Specifications and Friend Classes

c++ - 在网络 URL 上调用函数 cvCreateFileCapture 时有时会出现段错误

c++ - 启动时未应用构造函数值

c++ - 了解 C++11 中 lambda 函数的开销