关于shared_ptr智能指针的简单理解

本文介绍了C++中的智能指针shared_ptr,包括它的作用、优点、源码简化分析,以及如何使用。shared_ptr能自动管理内存,避免内存泄漏和多次析构问题。通过引用计数机制实现多指针指向同一内存时的正确释放。同时提醒了使用过程中避免直接使用get()操作原始指针,以及使用移动语义后的注意事项。

什么是智能指针

智能指针是一个模板函数,为我们封装好了一系列的方法来进行内存的自动管理。本质上我们也可以通过编写自己的模板类来实现和智能指针类似的功能,后续会提到相关的内容。


使用智能指针的优点

在使用智能指针之前,我们可以回顾一下以前我们在使用指针对内存进行操作。
比如现在我们编写了一个Test类,定义如下:

class Test
{
   
   
public:
	int TestGet() {
   
   
		return Num;
	}
	void showNum() {
   
   
		cout << Num << endl;
	}
	void TestSet(int num) {
   
   
		this->Num = num;
	}
	Test() {
   
   
		Num = 0;
		cout << "调用默认构造函数Test()" << endl;
	}
	Test(int Num) {
   
   
		this->Num = Num;
		cout << "调用构造函数Test(num)" << endl;
	}
	virtual ~Test() {
   
   
		cout << "调用析构函数~Test()" << endl;
	}

private:
	int Num;
};

之后我们new一块内存,并用一个指针指向它

Test* ptr1 = new Test;

下面我们来分析可能造成的三种情况:

1.没有使用delete语句

  • 如果不使用delete语句,这块内存就不会被释放。如果在编程的过程中不小心忘了,那这块内存就被浪费掉了。

2.内存泄漏

  • 第一种情况还不是最可怕的情况,若此时改变了ptr1指针的指向,比如:ptr1 = nullptr; 就会出现内存泄漏的情况,此时没有任何指针指向之前申请出来的内存,那么这块内存就无法被我们正常delete释放了。

3.多次析构</

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值