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 所分配的一片内存,必须存在一个存活的智能指针来指向这片内存,如果没有,那就会被释放掉。
所以,局部智能智能变量的释放,重新赋值,都会触发内存的自动回收。
上一篇: centos 如何从另一台服务器复制下载到本机服务器
下一篇: cnpm