c语言检查指针是否有效,c++ Nullptr并检查指针是否指向有效对象

在C中,任何不是0的都是真的。所以,你当然可以使用:

if (ptrToObject)

ptrToObject->doSomething();

安全地引用指针。

C 11改变游戏一点,nullptr_t是一个类型,其中nullptr是一个实例; nullptr_t的表示是具体的实现。所以一个编译器可能会定义nullptr_t但是它想要的。它只需要确保它可以对一个nullptr_t的不同类型的引用进行适当的限制,其中允许布尔值,并确保它可以区分一个nullptr_t和0。

因此,只要编译器遵循C 11语言规范,那么nullptr将被正确地和隐式地转换为布尔值false。而上面的代码片段仍然有效。

如果删除引用对象,则不会更改。

delete ptrToObject;

assert(ptrToObject);

ptrToObject = nullptr;

assert(!ptrToObject);

Because of how long I have been writing these ifs like this, it is second nature at this point to check if the pointers valid before using by typing if (object *) and then calling it’s members.

不,请保持对象的正确图形(最好使用唯一/智能指针)。如所指出的,没有办法确定不是nullptr的指针是否指向有效的对象。责任在于你维护生命周期,这就是为什么指针包装器首先存在。