on
C++ Learning Note
C++ program to demonstrate shared_ptr
#include <iostream>
#include <memory>
using namespace std;
class A
{
public:
void show()
{
cout << "A::show1()" << endl;
}
};
int main()
{
shared_ptr<A> p1(new A);
cout << "after p1 created, p1.use_count()=" << p1.use_count() << endl;
cout << "p1.get()=" << p1.get() << endl;
p1->show();
shared_ptr<A> p2(p1);
cout << "after shared_ptr<A> p2(p1), p2=" << p2 << endl;
cout << "after p2 created, p1.use_count()=" << p1.use_count() << endl;
cout << "after p2 created, p2.use_count()=" << p2.use_count() << endl;
p2->show();
// Relinquishes ownership of p1 on the object
// and pointer becomes NULL
p1.reset();
cout << "after p1.reset(), p1=" << p1 << endl;
cout << "after p1.reset(), p1.use_count()=" << p1.use_count() << endl;
cout << "after p1.reset(), p2.use_count()=" << p2.use_count() << endl;
cout << "after p1.reset(), p2.get()=" << p2.get() << endl;
return 0;
}
Output is like below:
@"after p1 created, p1.use_count()=1\r\n"
@"p1.get()=0x100205410\r\n"
@"A::show1()\r\n"
@"after shared_ptr<A> p2(p1), p2=0x100205410\r\n"
@"after p2 created, p1.use_count()=2\r\n"
@"after p2 created, p2.use_count()=2\r\n"
@"A::show1()\r\n"
@"after p1.reset(), p1=0x0\r\n"
@"after p1.reset(), p1.use_count()=0\r\n"
@"after p1.reset(), p2.use_count()=1\r\n"
@"after p1.reset(), p2.get()=0x100205410\r\n"
================================================================================
End