C ++良好的错误处理方法

时间:2012-10-05 22:15:11

标签: c++ exception

我开始用C ++编写一些代码,我从一个简单的任务管理器程序中得到了这个简单的类方法,我正在写一个实验:

void Task::setText(string text)
{
    if(text.length() > MIN_LENGTH)
    {
        this->text = text;
    }
}

如您所见,此方法将类text属性设置为传递给方法的属性,如果它的长度高于我在上面显示的代码上定义的MIN_LENGHT变量。因此,如果传递给方法的字符串的条件不能为真,那么我必须做一些事情。

在我买的C ++书中,没有解释错误处理,而只是在任何地方使用assert。因为如果表达式为false,断言只是中止程序,并且这是作为输入验证,我寻找更好的方法。

此搜索引导我C++ exceptions。在那里,它解释了如何通过创建一个继承自exception

的类来创建异常

良好的OOP实践表明,每个班级应该独立于该计划中的其他班级。那么我应该在哪里创建我创建的这个异常类?在同一个头文件中我定义了我的Task类?或者它应该在task.cpp中我定义类的每个方法?

也许这是一个愚蠢的问题,但只是想要保证安全并从一开始就遵循良好的软件架构实践。

3 个答案:

答案 0 :(得分:6)

建议#1:您需要完整阅读本书。

如果出现每个错误都不应该抛出异常。每1000次调用函数/方法时,异常应该少发生。这里1000不是魔术值,特别是其他数字可能是合适的。

换句话说。您需要回答的第一个问题:此错误可能发生的频率。如果这种情况经常发生,那么返回值(bool或enum或int)是一种更好的方法。

如果您决定使用例外,最好从std::exception派生。您应该将项目的例外放在单独的文件中。考虑几个班级,可能是3-10。最好在异常类中放置一个数据字段,该字段应该解释发生的事情的细节,而不是创建数百个不同的异常类。

答案 1 :(得分:1)

异常类可以在单独的.h .cpp文件中。这样你就可以重用其他东西。

根据我自己的经验法则:

断言是针对不应该发生的事情,但我们只是为了确保100%确定

例外是错误处理程序在生产中可能发生的事情

答案 2 :(得分:0)

C ++标准库提供了许多可以使用的exception类。开始时,你可以使用它们。在您的情况下,适用的似乎是range error 如果您仍想实现自己的异常类,那么声明和实现它应该取决于它们的代码。如果他们编写特定于类的错误,您可以将它们放在类文件中。如果你必须从多个文件中使用它们,请将它们放在它们自己的.cpp / .hpp对中。