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)
实际上,当我再次查看代码以提出这个主题时,我对上面的代码如何工作有一些疑问:
怎么可能这样做*nullPtr- 是不是因为nullPtr是一个静态对象,它在堆上分配内存,因此保证有一些空间和
由于我们返回对obj的const引用,编译器是否创建了一个临时对象(某种类型的nullObj ??)或者const引用是否作为nullPtr本身的别名?
Che*_*Alf 17
我很惊讶没有人谈论引用何时可以指向null对象
那是因为它不能,在正确的程序中.
取消引用nullpointer的函数具有未定义的行为.允许编译器发出代码,例如,在那时导致崩溃.
然而,UB的一个可能的影响是代码完成了人们认为会做的事情.因此可以发生空引用.我从来没有遇到过,但如果你这样做,那就意味着代码中存在严重的逻辑错误.
您显示的null-object-reference函数的所有使用都是逻辑错误.
你最好用这些用途来解决问题.;-)
干杯&hth.,
我很惊讶没有人谈论引用何时可以指向null对象.
决不.
(i)如何做*nullPtr - 是不是因为nullPtr是一个静态对象,它在堆上分配了内存,因此保证为deref分配一些空间和地址?
不是.您正在取消引用空指针,该指针正在调用未定义的行为.
(ii)由于我们返回对obj的const引用,编译器是否创建了一个临时对象(某种类型的nullObj ??)或者const引用是否作为nullPtr本身的别名?
在此阶段,编译器可以生成鼻守护进程或黑洞.如果你很幸运,你会遇到分段错误或其他类型的访问冲突.
不要这样做