我们只能取消引用一个有效的指针,只能检查悬空内置指针指向的地址。我们无法访问其值(指向的对象的地址中的值)。
int* ptr = nullptr;
if(ptr) // != 0x00000000
std::cout << *ptr << '\n';
ptr = new int(1000);
if(ptr) // != 0x00000000
std::cout << *ptr << '\n';
delete ptr; // still pointing at the address of that dynamic object but that object has been destroyed.
if(ptr) // succeeds or undefined behavior?
std::cout << *ptr << '\n'; // of course UB here
我明白了,但是我关心的只是检查指针值是否安全或者会导致未定义行为?if(ptr)
。因为假设我没有访问该地址上的值,就像这样:std::cout << *ptr
。
nullptr
无法确定所指向的对象是否已被销毁。(显然,如果指针是nullptr
,那么就不存在所指向的对象,但反过来则不一定成立。) - Nathan Pierson