C++重新认知:智能指针

本文介绍了智能指针在C++中的重要性,特别是unique_ptr和shared_ptr的作用,以及如何避免内存泄露,如通过RAII机制和使用weak_ptr处理循环引用问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、为什么要有智能指针

内存泄露是我们开发大型项目时最为头疼的问题,当我们将对象建立在堆上时,因为需要我们自己手动释放,因此避免不了忘记删除,或者删除时没有考虑清楚情况的问题,从而造成悬挂指针或者是野指针的问题。

二、智能指针是什么

简单理解的话,智能指针采用RAII机制。即智能指针虽然是以指针的方式运作,但是实际上是一个对象,在自己生命周期结束后,会自动释放掉,这样的话就不用让开发人员时刻把心思放在释放对象这个问题上了,也降低了内存泄漏的概率。

在C++中,智能指针一共定义了4种:
auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。 其中,auto_ptr在C++11种已经摒弃掉,在C++17中已经废除不可用。

三、智能指针

1、unique_ptr

在这里插入图片描述
指针p在运行完test()函数后会直接释放掉。
在这里插入图片描述
需要注意的是,unique_ptr并没有负责复制的构造函数,因此不支持拷贝和赋值操作。原因是unique_ptr会独享p1的所有权,如果p2和p3失去p1的所有权时(即p1释放掉)会delete p1两次,p1释放一次,p2释放会再次delete p1一次。
在这里插入图片描述
虽然不能够拷贝和赋值操作,但是可以将p1的所有权转移给p2管理,使用std::move函数即可。

unique最常见的使用场景,就是替代原始指针,为动态申请的资源提供异常安全保证。

#include<iostream>
#include<vector>
using namespace std;

class Test
{
   
public:
	void add();<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rain_ZZX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值