智能指针

将对堆空间的分配转化为对对象的操作,因为一般情况下你是手动写new和delete的,而一旦使用对象就能自动构造函数分配空间和析构函数来释放空间,这样堆空间的使用就实现了自动化,这就减少了人为的失误造成的内存泄露。
智能指针其实也是模版类。
常用的智能指针有3种,它们是auto_ptr、unique_ptr和shared_ptr,在使用它们之前一定要添加memory头文件,如下图所示:



它们的用法如下:



这个new double实际上是声明了一个无名指针,这个指针作为空间的地址而存在。其实,pd的参数是下图中红框所示区域:

如上图所示,即它其实是new+构造函数的形式,虽然有时候将默认构造函数的括号省略,但那仍然是构造函数。
智能指针有带有explicit关键字的以普通指针为参数的构造函数,能将普通指针转换成智能指针,与此同时,它阻止了隐式转换的发生。

智能指针只能处理堆上分配的空间,其他的空间处理不了。如果你把一个非堆地址传给智能指针这是不合理的,如下图所示。


智能指针_第1张图片

虽然不会报错,但是你会发现程序出现了异常行为。

你可能感兴趣的:(智能指针)