next up previous contents index
Next: Selbstdefinierte new/delete-Operatoren Up: 50 Ways to Improve Previous: Überladen von new

Das globale new nicht überdecken

 

Wenn eine Klasse den Operator new definiert (z.B. mit eigener Signatur) ist das Standard-new überdeckt:

    typedef void (*fuptr())
    class X
    { ...
      public:
      void* operator new(size_t size, 
                         fuptr f);
    };
    void fu();
    X *px1 = new(fu) X;
    X *px2 = new X; // FEHLER!

Statt den Anwender zu zwingen, ::new zu verwenden:

    class X
    { ...
      public:
      void* operator new(size_t size, 
                         fuptr f);
      void* operator new(size_t size)
      { return ::new char[size];
      }
    };


next up previous contents index
Next: Selbstdefinierte new/delete-Operatoren Up: 50 Ways to Improve Previous: Überladen von new

Peter Pfahler, 1997