Wenn man den Operator new überlädt, muß man bedenken, daß er an abgeleitete Klassen vererbt wird:
class base { ... public: void* operator new(size_t size); ... }; class deriv: public base { ... }; ... deriv *dp = new deriv; // base::new
base::new wird in der Regel nicht das Gewünschte tun.
Besser: Ein sicheres Basisklassen-new:
void* base::operator new(size_t size) { if (size != sizeof(base)) // nimm globales new: return ::new char[size]; ... }