Skip to content
Snippets Groups Projects
SingletonHolder.cpp 1.12 KiB
Newer Older
#include <list>
#include <MantidKernel/SingletonHolder.h>

namespace Mantid
{
namespace Kernel
{

/// List of functions to call on program exit
static std::list<atexit_func_t>* cleanup_list = NULL;

/// Function registed to atexit() that will clean up
/// all our singletons
/// This function may be registed with atexit() more than once, so it needs to
/// clear the list once it has called all the functions
{
    if (cleanup_list == NULL)
    {
	return;
    }
    std::list<atexit_func_t>::const_iterator it;
    for(it=cleanup_list->begin(); it != cleanup_list->end(); ++it)
    {
	(*(*it))();
    }
    delete cleanup_list;
    cleanup_list = NULL;
}

/// Adds singleton cleanup function to our atexit list
/// functions are added to the start of the list so on deletion it is last in, first out
/// @param func :: Exit function to call - the singleton destructor function
MANTID_KERNEL_DLL void AddSingleton(atexit_func_t func)
{
    if (cleanup_list == NULL)
    {
	cleanup_list = new std::list<atexit_func_t>;
Roman Tolchenov's avatar
Roman Tolchenov committed
    atexit(&CleanupSingletons);