www.pudn.com > Loki.rar > Singleton.cpp


//////////////////////////////////////////////////////////////////////////////// 
// 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-Welsey 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(*pTrackerArray) * --elements)); 
    // Destroy the element 
    delete pTop; 
} 
 
//////////////////////////////////////////////////////////////////////////////// 
// Change log: 
// June 20, 2001: ported by Nick Thurn to gcc 2.95.3. Kudos, Nick!!! 
// May  10, 2002: ported by Rani Sharoni to VC7 (RTM - 9466) 
////////////////////////////////////////////////////////////////////////////////