介绍shared_prt对基本类型使用
#include <iostream>
using namespace std;
int main()
{
int* a = new int;
*a = 100;
delete a;
shared_ptr<int> b = make_shared<int>();
*b = 100;
printf("b=%d", *b);
}
对自定义对象使用, 可以看出智能指针的行为和普通指针非常类似
#include <iostream>
using namespace std;
class ClassA {
public:
ClassA() {
printf("ClassA\n");
}
~ClassA() {
printf("~ClassA\n");
}
int num;
};
int main()
{
ClassA* a = new ClassA;
delete a;
shared_ptr<ClassA> b = make_shared<ClassA>();
b->num = 100;
}
智能指针的引用计数机制,当引用次数为0的时候,释放该指针
#include <iostream>
using namespace std;
class ClassA {
public:
ClassA() {
printf("ClassA\n");
}
~ClassA() {
printf("~ClassA\n");
}
int num;
};
shared_ptr<ClassA> fun(shared_ptr<ClassA> pa)
{
printf("2use_count=%d\n", pa.use_count());
pa->num++;
return pa;
}
int main()
{
ClassA* a = new ClassA;
delete a;
shared_ptr<ClassA> b = make_shared<ClassA>();
printf("1use_count=%d\n", b.use_count());
b->num = 100;
shared_ptr<ClassA> c = fun(b);
printf("3use_count=%d\n", b.use_count());
}