欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

share_ptr和make_share 的使用

程序员文章站 2024-02-29 09:45:40
...

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

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

相关标签: C++ shared_ptr