Listing 8
#include <memory>
#include <iomanip>
#include <iostream>
using std::tr1::shared_ptr;
using std::cout; using std::boolalpha;
struct resource
{ // trace resource allocation and release
resource()
{ // report allocation
cout << "resource allocated at " << (void*)this << '\n';
}
~resource()
{ // report release
cout << "resource released at " << (void*)this << '\n';
}
void do_something() const {}
};
int main()
{ // demonstrate constructors, destructors, and reference count
cout << boolalpha;
resource *rp1 = new resource;
shared_ptr<resource> sp1(rp1);
cout << sp1.use_count() << ' ' << sp1.unique() << '\n';
{ // local object sp2 goes out of scope at end of block
shared_ptr<resource> sp2(sp1);
cout << boolalpha << sp1.use_count() << ' ' << sp1.unique() << '\n';
cout << boolalpha << sp2.use_count() << ' ' << sp2.unique() << '\n';
}
cout << sp1.use_count() << ' ' << sp1.unique() << '\n';
return 0;
}