3

主要的是我不知道处理空指针的最佳实践。

这是代码:

int GetSomeVal()
{
    if(ptr)
    {
        return *ptr
    }
    else
    {
        // What here?
        // Should I return 0? or -1 or throw an exception?
    }
}

我收到这个问题是因为在 google 的 c++ style-guide 中,它不建议我们使用异常,这可能是另一个话题。

如果我应该使用异常,这是否意味着我必须设计一个异常类并抛出它?如果我不应该使用异常,最佳做法是什么?

4

3 回答 3

7

ptr如果to be有意义NULL,则不应抛出异常。异常用于指示出现问题。

如果ptrNULL因为出了问题,无论如何,抛出异常。

谷歌的代码风格将被谷歌使用。它们禁止在任何高级 OO 语言中通常使用的许多东西(如引用参数、异常等)。除非您为 Google 工作,否则您不应该遵守它。

您可以设计自己的异常类,从 派生它std::exception,然后从代码中抛出它。

另外,从您的代码来看,ptr是一个成员。如果它应该在构造函数中被初始化而它没有被初始化,也许你应该从构造函数中抛出异常。拥有一个不可用的对象是没有用的。

于 2012-08-27T07:05:52.993 回答
1

如果您不想抛出异常,我将按此顺序使用这些选项

  1. boost::optional

  2. int GetSomeVal(int &ok)-false如果指针是,则确定NULL

  3. 如果指针是NULL-1例如)返回一些错误代码

于 2012-08-27T07:05:42.037 回答
1

它高度依赖于功能规范。

ptr==NULL可能是对函数的有效但异常的输入,例如,它是由程序的输入数据不正确引起的。那么处理它的最好方法是返回一个错误代码或抛出一个打算在调用链上处理的异常。

在其他情况下,ptr==NULL设计永远不可能发生,而只是因为其他地方的错误。那么最好的方法是记录错误并终止程序。

于 2012-08-27T07:30:45.823 回答