一、shared_ptr 初始化
shared_ptr<int> p1=make_shared<int>();//初始化为0
*p1=20;//像平常指针一样使用
shared_ptr<int> p2=make_shared<int>(43);
shared_ptr<string> p3=make_shared<string>("hello");
shared_ptr<string> p4=make_shared<string>("");//初始化为空串
auto p5=make_shared<vector<int>>();//指向一个空的vector<int>
std::shared_ptr<int> ptr(new int(55));//利用动态指针初始化 智能指针
std::shared_ptr<int> ptr=new int(55);/这个时错误的写法
二、shared_ptr 拷贝和赋值
auto p=make_shared<int>(20);
auto q(p);//表示p和q 指向相同的对象,此对象有两个引用者
shared_ptr<int> p2(new int(34));
p2.reset(new int(1024));//P2 重新指向另一个对象,不能用等号
三、使用
std::initializer_list<std::string> il = { "lucy","lili","jack","rose" };
//string 的一个列表
shared_ptr<std::vector<string>> p = make_shared<std::vector<string>>(il);
//智能指针p 指向一个 il 列表初始化的vector<string>容器
auto it = p->begin();
for (it; it != p->end(); ++it)
{
cout << *it << endl;
}
四、普通指针指向智能指针
std::shared_ptr<int> ptr(new int(55));
std::cout << ptr << std::endl;
int *p = ptr.get();
std::cout << p << std::endl;
经测试 两个地址时一样的,所以就通过get()函数实现了,普通指针指向智能指针的对象