在C++中指针是经常用到的,但是在使用指针的时候,程序员一定要非常注意,不然很容易就造成系统崩溃或者大量的资源浪费,这里就介绍几种指针的概念。
空指针:就是初始化为0、null或者nullptr的指针。在以前一般都是使用的Null来让该指针成为空指针,在最新版本的C++11中我们可以给指针赋值为nullptr来让指针成为空指针,nullptr为字面值。
例:int *p = 0;
int *p = Null;
int *p = nullptr;
悬垂指针:造成悬垂指针的原因是指针指向曾经存在的对象,但是该对象现在已经不存在了,此类指针为悬垂指针。该指针结果为定义,往往导致程序错误,并且难以检测出来。
预防悬垂指针的发生,我们可以使用智能指针来解决这个问题。下面介绍下智能指针。
智能指针:该指针是指一种实现,能让指针在离开自己生命周期的时候自动销毁指向的内容(对象)等,没一个智能指针都有一个计数器,当将该指针作为另一个指针的副本时,计数器加1,作为函数的参数或者返回值的时候,计数器加1,赋值运算会增加右值的计数值,减少左值的计数值。当该计数器的值为0时,系统会自动销毁对象,这样就避免了悬垂指针的产生。(只能指针只有在确定没有其他的指针还在指向该对象的时候才会销毁对象)。