Hi there,

I am looking for a solution, which would allow me to use a singleton with overloaded new/delete. Basically, I need to overload global new/delete operators and I already have my own memory manager, which does not rely on new/delete at all. The problem is, it is an object-oriented code and I need to instantiate this manager somehow. I have been using DLL so far, but since I do not consider this a good solution, I would like to replace this with a static library instead.

Code:
/* Manager definition */

...

void* operator new(std::size_t Size)
{
    return Manager->Allocate(Size);
}

void operator delete(void* Ptr)
{
    Manager->Free(Ptr);
}
The problem appears when dynamic initialization of global variables begin. Since the order of global initialization may vary, how would I construct my manager? Worse, how would I destroy it?

It can't be a simple global variable. I was considering static variable (or something like this) inside new(), but then I have no control on destroying it.

The solution can be platform-specific (for GCC) I was looking for some non-standard routine, which would be called before any global initialization and after global finalization (could use placement new then). Is there something like this? Or should I get back to DLLs?