#include <memory>
class A
{
public:
A() { cout << "Constructor" << endl; }
~A() {cout<<"delete"<<endl;}
};
int main(int argc, char *argv[])
{
std::shared_ptr<A> p(new A);//1
std::shared_ptr<A> p2=p;//2
return 0;
}
//1
//0
//销毁
Constructor
delete
使用shared_ptr,可以免于delete。?
内容摘自:《深入应用C++11 代码优化与工程级应用》
智能指针是存储指向动态分配(堆)对象指针的类。
用于生存期控制。
确保在离开指针所在作用域时,自动销毁动态分配的对象,防止内存泄漏。
int *ptr=new int;
shared_ptr<int> p1(ptr);
shared_ptr<int> p2(ptr);
不可以用一个原始指针初始化多个shared_ptr
shared_ptr<int> p1(new int(10));
cout<<p1.use_count()<<endl;
shared_ptr<int> p2=p1;
cout<<p1.use_count()<<endl;
shared_ptr<int> p3=p2;
cout<<p1.use_count()<<endl;
1
2
3
智能指针之shared_ptr初始化,引用计数,常用操作和自定义删除器等等03-CSDN博客
shared_ptr<int> p1(new int(10));
shared_ptr<int> p2=p1;
shared_ptr<int> p3=p2;
cout<<p1.use_count()<<endl;
p1.reset();
cout<<p1.use_count()<<endl;
cout<<p2.use_count()<<endl;
3
0
2
shared_ptr<int> p1(new int(10));
shared_ptr<int> p2=p1;
shared_ptr<int> p3=p2;
cout<<p1.use_count()<<endl;
p1.reset(new int(5));
cout<<p1.use_count()<<endl;
cout<<p2.use_count()<<endl;
3
1
2