share_ptr和make_share 的使用

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 所分配的一片内存,必须存在一个存活的智能指针来指向这片内存,如果没有,那就会被释放掉。

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值