如果我得到一个空指针该怎么办?

时间:2012-08-27 07:04:20

标签: c++ pointers exception-handling

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

这是代码:

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

我有这个问题,因为在google的c ++样式指南中,它并不建议我们使用异常,这可能是另一个主题。

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

3 个答案:

答案 0 :(得分:7)

如果ptrNULL有意义,则不应抛出异常。例外用于表示出现问题。

如果ptrNULL因为出了问题,请务必抛出异常。

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

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

此外,从您的代码中,ptr是会员。如果它应该在构造函数中初始化而它没有,那么也许你应该从构造函数中抛出异常。拥有一个不可用的对象毫无用处。

答案 1 :(得分:1)

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

  1. boost::optional

  2. int GetSomeVal(int &ok) - 如果指针为false

  3. ,请确认NULL
  4. 如果指针为NULL(例如-1),则返回一些错误代码

答案 2 :(得分:1)

这在很大程度上取决于功能规格。

ptr==NULL可能是函数的有效但异常的输入,例如,它是由程序的错误输入数据引起的。然后处理它的最好方法是返回错误代码或抛出一个异常,该异常旨在处理调用链。

在其他情况下,ptr==NULL永远不会在设计上发生,但仅仅是因为其他地方的错误。然后最好的方法是记录错误并终止程序。