文章来源于C++Primer的读后笔记
众所周知,智能指针是模版,因此应在<>里面给出类型,则创建shared语句为:
shared_ptr p1;
支持功能代码实例:
int main()
{
shared_ptr p;//默认初始化为空
if(!p)
cout << "[(p):当将p作为条件判断时候,若p指向其他对象,则返回true,若为空,返回false]" << endl;
return 0;
}
int main()
{
shared_ptr p = make_shared("make_shared(param)返回一个shared_ptr,指向动态分配的T类型内存,使用param初始化\n*p为对shared内存的解引用");
cout << *p <
make_shared(count,param)
make_shared()
eg:
make_shared(10,"s"); //ssssssssss
make_shared(); //0
交换两个shared_ptr所指向的对象(不仅适用于shared_ptr)
int main()
{
shared_ptr p1 = make_shared("I am p1");
shared_ptr p2 = make_shared("I am p2");
cout << "交换之前:" << endl;
print(p1, p2);
cout << "第1次交换之后:" << endl;
swap(p1, p2);
print(p1, p2);
cout << "第2次交换之后:" << endl;
p1.swap(p2);
print(p1, p2);
return 0;
}
返回p共享对象的智能指针数量
int main()
{
shared_ptr p1 = make_shared("I am p1");
cout << "p1:引用次数:" << p1.use_count() << endl;
shared_ptr p2(p1);
cout << "p1:引用次数:" << p1.use_count() << endl;
return 0;
}
注意:p2中同样记录引用次数的,并且于p1数量一致。引用次数为0时,自动释放内存。
拷贝,下面代码主要验证是否增加拷贝次数
int main()
{
shared_ptr p1 = make_shared("I am p1");
cout << "p1:引用次数:" << p1.use_count() << endl;
shared_ptr p2 = shared_ptr(p1);
cout << "p1:引用次数:" << p1.use_count() << endl;
shared_ptr p3 = shared_ptr(p1);
cout << "p1:引用次数:" << p1.use_count() << endl;
return 0;
}
use_count 为0时,调用析构函数完成对象的销毁(为了方便掩饰,自定义A类)
class A
{
int a;
public:
A()
{
a = 10;
}
~A()
{
cout << "~A:" << "调用了我" << endl;
}
};
int main()
{
shared_ptr a = make_shared();
return 0;
}