//////////////////////////////////////////////////////////////////////////////// // The Loki Library // Copyright (c) 2001 by Andrei Alexandrescu // This code accompanies the book: // Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design // Patterns Applied". Copyright (c) 2001. Addison-Wesley. // Permission to use, copy, modify, distribute and sell this software for any // purpose is hereby granted without fee, provided that the above copyright // notice appear in all copies and that both that copyright notice and this // permission notice appear in supporting documentation. // The author or Addison-Wesley Longman make no representations about the // suitability of this software for any purpose. It is provided "as is" // without express or implied warranty. //////////////////////////////////////////////////////////////////////////////// // Last update: June 20, 2001 #include "Singleton.h" using namespace Loki::Private; Loki::Private::TrackerArray Loki::Private::pTrackerArray = 0; unsigned int Loki::Private::elements = 0; //////////////////////////////////////////////////////////////////////////////// // function AtExitFn // Ensures proper destruction of objects with longevity //////////////////////////////////////////////////////////////////////////////// void Loki::Private::AtExitFn() { assert(elements > 0 && pTrackerArray != 0); // Pick the element at the top of the stack LifetimeTracker* pTop = pTrackerArray[elements - 1]; // Remove that object off the stack // Don't check errors - realloc with less memory // can't fail pTrackerArray = static_cast(std::realloc( pTrackerArray, sizeof(T) * --elements)); // Destroy the element delete pTop; } //////////////////////////////////////////////////////////////////////////////// // Change log: // June 20, 2001: ported by Nick Thurn to gcc 2.95.3. Kudos, Nick!!! // January 10, 2002: Fixed bug in call to realloc - credit due to Nigel Gent and // Eike Petersen ////////////////////////////////////////////////////////////////////////////////