/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ #include "ns3/ptr.h" #include "ns3/object.h" #include using namespace ns3; class A : public Object { public: A (); ~A (); void Method (void); }; A::A () { std::cout << "A constructor" << std::endl; } A::~A() { std::cout << "A destructor" << std::endl; } void A::Method (void) { std::cout << "A method" << std::endl; } static Ptr g_a = 0; static Ptr StoreA (Ptr a) { Ptr prev = g_a; g_a = a; return prev; } static void ClearA (void) { g_a = 0; } int main (int argc, char *argv[]) { { // Create a new object of type A, store it in global // variable g_a Ptr a = Create (); a->Method (); Ptr prev = StoreA (a); NS_ASSERT (prev == 0); } { // Create a new object of type A, store it in global // variable g_a, get a hold on the previous A object. Ptr a = Create (); Ptr prev = StoreA (a); // call method on object prev->Method (); // Clear the currently-stored object ClearA (); // get the raw pointer and release it. A *raw = GetPointer (prev); prev = 0; raw->Method (); raw->Unref (); } return 0; }