next up previous contents index
Next: Das globale new nicht Up: 50 Ways to Improve Previous: Ergebniswert von new testen

Überladen von new

 

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


next up previous contents index
Next: Das globale new nicht Up: 50 Ways to Improve Previous: Ergebniswert von new testen

Peter Pfahler, 1997