C语言中我们学过指针,那么为什么在C++中还需要存在智能指针呢?
实际上它的出现就是给c++的内存管理“填坑”来的~ 因为它的内存自己管理,所以说,有的时候使用malloc或者new创建的对象忘记释放就会导致内存泄漏,又或者此时释放语句之前有一段代码是抛异常的话,那么执行流就会乱跳,导致内存也无法释放。
比如这一段代码,若n太大,开辟空间失败会抛异常,导致执行流跳出没有释放指针p。
void Func()
{
int n;
cin >> n;
int *p = new int;
int *t = new int[n];//失败时抛异常
delete p;//没有释放p
delete t;
}
所以c++就引入了智能指针的概念来解决该问题。在了解智能指针之前应该先了解RAII思想。
RAII思想
智能指针的核心思想就是RAII(Resource Acquisition Is Initialization),RAII是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。
RAII是资源获得即初始化,在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的