[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