share_ptr和make_share 的使用

本文详细探讨了C++中shared_ptr和make_shared的使用,通过实例展示了智能指针如何自动管理内存,并揭示了内存释放与智能指针关联的原理。重点讲解了内存回收时机和多个shared_ptr之间的内存共享情况。

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

shared_ptr和make_share 的使用

智能指针的使用可以让我们省去很多自动释放的功夫,保持内存的干净整洁。
智能智能所管理的内存是如何自动释放的呢?我们写个简单的例子来测试一下。

#include <iostream>
using namespace std;
class test {
public:
	test() {
		cout << "构造函数" << endl;
	}

> 这里是引用

	~test() {
		cout << "析构函数" << endl;
	}
public:
	void print()
	{
		cout << "hello,我在这里" << endl;
	}
};
void test_share()
{
	shared_ptr<test> a = NULL;
	a = make_shared<test>();
	a->print();
	a = make_shared<test>();
	a->print();
	while (1);
}
int main()
{
	test_share();
	system("pause");
	return 0;
}

打印输出为:

构造函数
hello,我在这里
构造函数
析构函数
hello,我在这里

结论:

对智能指针a进行了两次赋值,当a在第二次进行赋值的时候,发现第一次申请的内存已经得到释放。说明,第一次申请的内存已经被回收。因为在a得到新的值的时候,第一次申请的内存就已经是一片无人使用的内存,会被系统使用到。

下面我们加入指针变量b,在a得到第二次赋值之前,将a第一次的内存赋值给b,再看打印结果

void test_share()
{
	shared_ptr<test> a = NULL;
	shared_ptr<test> b = NULL;
	a = make_shared<test>();
	a->print();
	b = a;//测试点1
	a = make_shared<test>();
	a->print();
	while (1);
}

打印输出为:

构造函数
hello,我在这里
构造函数
hello,我在这里

总结一下:
智能指针的释放是伴随着智能指针变量的释放而释放的。

对于一片make_share 所分配的一片内存,必须存在一个存活的智能指针来指向这片内存,如果没有,那就会被释放掉。

所以,局部智能智能变量的释放,重新赋值,都会触发内存的自动回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值