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是资源获得即初始化,在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的

C++中的智能指针是为了解决内存管理问题,尤其是防止内存泄漏和异常安全。RAII(Resource Acquisition Is Initialization)思想是其核心,它在对象构造时获取资源,并在析构时自动释放。通过智能指针和智能锁,可以确保资源在对象生命周期内有效并自动管理,避免手动释放带来的风险。智能锁能确保在对象生命周期结束后正确解锁,防止死锁和资源未释放的问题。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



