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