如果我得到一个空指针,该怎么办
what should I do if I got a null pointer?
主要是我不知道处理空指针的最佳实践。
这是代码:
int GetSomeVal()
{
if(ptr)
{
return *ptr
}
else
{
// What here?
// Should I return 0? or -1 or throw an exception?
}
}
我之所以有这个问题,是因为在谷歌的c++风格指南中,它没有建议我们使用异常,这可能是另一个话题。
如果我应该使用异常,这是否意味着我必须设计一个异常类并抛出它?如果我不应该使用例外,最佳实践是什么?
如果ptr
是NULL
是有意义的,那么就不应该抛出异常。异常用于表示出现问题。
如果ptr
是NULL
,因为出现了问题,那么无论如何都要抛出异常。
谷歌的代码风格将被谷歌使用。它们禁止了许多通常在任何高级OO语言中使用的东西(如引用参数、异常等)。除非你为谷歌工作,否则你不应该服从它。
您可以设计自己的异常类,从std::exception
派生它,然后从代码中抛出它。
此外,根据您的代码,ptr
是一个成员。如果它应该在构造函数中初始化,但它没有初始化,也许你应该从构造函数中抛出异常。拥有一个不可用的对象是没有用的。
如果你不想抛出异常,我会按照这个顺序使用这些选项
-
boost::optional
-
int GetSomeVal(int &ok)
-如果指针是NULL
,则使false
正常 -
如果指针是
NULL
(例如-1
),则返回一些错误代码
它在很大程度上取决于函数规范。
ptr==NULL
可能是函数的有效但异常的输入,例如,它是由程序的错误输入数据引起的。然后,处理它的最佳方法是返回错误代码或抛出一个异常,该异常将在调用链上进行处理。
在其他情况下,ptr==NULL
在设计上永远不会发生,只是因为其他地方有一个错误。然后最好的方法是记录错误并终止程序。
相关文章:
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么我在C++中有一个空指针取消引用
- 为什么 C++11 包含一个关于比较空指针的奇怪子句
- opus_encoder_create() 返回一个空指针
- C++返回一个空指针数组
- 如果我得到一个空指针,该怎么办
- 从字符串数组打印其中一个字符串时出现空指针赋值错误
- Do C和C++标准意味着地址空间中必须只存在一个特殊值来表示空指针的值
- 如何正确地将一个文本整数作为参数作为空指针进行传递,并使用其地址作为整数的实际值
- 以何种形式,可以通过管道将空指针发送到不同进程地址空间中的另一个进程
- 取消引用一个空指针数组
- 从空指针中推导一个类型
- 在C++中删除一个空指针被认为是未定义的行为
- 释放一个空指针
- 为什么空指针解引用不是一个异常
- 是否空指针分配分区有一个错误
- 返回语句返回一个空指针值而不是期望的值
- 将空指针增加一个字节?2
- 从指向结构体的空指针到另一个变量的深度复制