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

what should I do if I got a null pointer?

本文关键字:空指针 一个 怎么办 如果      更新时间:2023-10-16

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

这是代码:

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

我之所以有这个问题,是因为在谷歌的c++风格指南中,它没有建议我们使用异常,这可能是另一个话题。

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

如果ptrNULL是有意义的,那么就不应该抛出异常。异常用于表示出现问题。

如果ptrNULL,因为出现了问题,那么无论如何都要抛出异常。

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

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

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

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

  1. boost::optional

  2. int GetSomeVal(int &ok)-如果指针是NULL ,则使false正常

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

它在很大程度上取决于函数规范。

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

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