c++ - 指向空对象的引用

标签 c++ pointers object reference null

我看到了这个讨论 - Checking for a null object in C++令我惊讶的是,没有人谈论何时引用可以指向空对象。在我们的代码中,我们经常使用空对象。有如下函数返回 nullObj。

const Obj&  
nullObj()  
{  
   static obj* nullPtr = NULL;   
   return static_cast<  const Obj&>(*nullPtr);    
}  

实际上,当我再次查看代码以提出这个话题时,我对上面的代码是如何工作的有一些疑问:

  1. *nullPtr 怎么可能 - 是不是因为 nullPtr 是一个静态对象,它是在堆上分配的内存,因此它保证有一些空间并且

  2. 既然我们要返回对 obj 的 const 引用,编译器会创建一个临时对象(对某种 nullObj 吗??)还是将 const 引用充当 nullPtr 本身的别名?

最佳答案

I was surprised that no one talked about when reference can point to a null object

那是因为在正确的程序中它不能。

您取消引用空指针的函数具有未定义的行为。例如,允许编译器发出在该点导致崩溃的代码。

但是,UB 的一种可能影响是代码按照人们的预期行事。所以可能会出现空引用。我从来没有遇到过,但是如果你遇到了,那就意味着代码中存在严重的逻辑错误。

您显示的所有 null-object-reference 函数的使用都是逻辑错误。

您最好了解这些用途并进行修复。 ;-)

干杯,

关于c++ - 指向空对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6421083/

相关文章:

java - 从Java中其他类的对象列表中获取对象列表

c++ - 垃圾收集 - 响应能力

c++ - lpData 在 RegQueryValueEx 之后没有得到值

C++类问题

javascript object.key 不工作

python - 循环引用在哪里?

c++ - 为什么在我的代码中触发 -fpermissive

c++ - 在 C++ 中强制删除 std::shared_ptr

C和64位指针计算

iphone - 我可以在设置 viewController 时跳过创建单独的指针吗?