[delete(t) ptr] mit [void operator delete(void * ptr, T t)] ???



  • Hallo

    Ich habe mal wieder eine Form-Frage an die C++-Standard-Experten 😉

    Dass die Operatoren new und delete Sonderformen sind, ist mir ja klar.
    Aber ich hätte erwartet, dass es zu einem überladenen new auch ein entsprechendes delete gibt/geben darf. Mein Compiler MSVC kennt das aber nicht.

    Die beiden überladenen Operatoren sind:

    void* operator new(size_t sz, MemoryMgr& mgr);
    void operator delete(void* ptr, MemoryMgr& mgr);
    

    Während

    MemoryMgr mgr;
    T* ptr = new (mgr) T;
    

    funktioniert, lässt sich

    delete (mgr) ptr;
    

    nicht kompilieren ...

    Warum ???

    Mir bleibt sonst nur die Alternative mit

    ptr->~T();
    operator delete(ptr, mgr);
    

    aber das finde ich recht unschön. Die new (param) - Syntax hingegen halte ich für annehmbar, während der Operator selbst nur den Speicher besorgt, wird anschließend ganz korrekt der Konstruktor aufgerufen. Genau so ein Schema hätte ich mir von delete (param) für den Destruktor erwartet.

    Hat sich schon mal jemand damit beschäftigt und kennt hier eine Lösung? Trägt der Standard für das Verhalten die Schuld oder ist es (mal wieder) der Compiler. 😕

    Danke für eure Eindrücke und Infos zu diesem zugegeben etwas besonderen Thema

    lg XOR


Anmelden zum Antworten