指向Null对象的引用

cpp*_*der 6 c++ null pointers reference object

我看到了这个讨论 - 在C++中检查一个空对象,我很惊讶没有人谈论何时引用可以指向一个null对象.在我们的代码中,我们经常使用null对象.有如下函数返回nullObj.

const Obj&  
nullObj()  
{  
   static obj* nullPtr = NULL;   
   return static_cast<  const Obj&>(*nullPtr);    
}  
Run Code Online (Sandbox Code Playgroud)

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

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

  2. 由于我们返回对obj的const引用,编译器是否创建了一个临时对象(某种类型的nullObj ??)或者const引用是否作为nullPtr本身的别名?

Che*_*Alf 17

我很惊讶没有人谈论引用何时可以指向null对象

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

取消引用nullpointer的函数具有未定义的行为.允许编译器发出代码,例如,在那时导致崩溃.

然而,UB的一个可能的影响是代码完成了人们认为会做的事情.因此可以发生空引用.我从来没有遇到过,但如果你这样做,那就意味着代码中存在严重的逻辑错误.

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

你最好用这些用途来解决问题.;-)

干杯&hth.,

  • @sikrish:C++指针可以为null.这是使用指针作为参数的一个主要原因:它支持null.引用不能为null.这是使用引用作为参数的主要原因:它们不能为空.干杯&hth., (6认同)

Lig*_*ica 7

我很惊讶没有人谈论引用何时可以指向null对象.

决不.

(i)如何做*nullPtr - 是不是因为nullPtr是一个静态对象,它在堆上分配了内存,因此保证为deref分配一些空间和地址?

不是.您正在取消引用空指针,该指针正在调用未定义的行为.

(ii)由于我们返回对obj的const引用,编译器是否创建了一个临时对象(某种类型的nullObj ??)或者const引用是否作为nullPtr本身的别名?

在此阶段,编译器可以生成鼻守护进程或黑洞.如果你幸运,你会遇到分段错误或其他类型的访问冲突.

不要这样做