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];
...
}