Listing 1
#include <utility> #include <iostream> #include <vector> using std::cout; using std::vector; using std::tr1::shared_ptr; struct instrumented { // report construction and destruction instrumented() { cout << " created object at: " << (void*)this << '\n'; } ~instrumented() { cout << " destroyed object at: " << (void*)this << '\n'; } }; typedef shared_ptr<instrumented> sp; static void use_vector(sp ptr) { // push shared_ptr objects into vector vector<sp> vec; vec.push_back(ptr); cout << "creating two objects\n"; for (int i = 0; i < 2; ++i) vec.push_back(sp(new instrumented)); } int main() { // demonstrate reference counting cout << "creating one object\n"; sp ptr(new instrumented); cout << "calling use_vector\n"; use_vector(ptr); cout << "returned from use_vector\n"; return 0; }