@unskilled:
Klar gibt's das, aber es gibt keine "placement delete expression" analog zu "new (p1, p2, ...) T".
Unterschied: der (placement oder nicht) new Operator besorgt nur Speicher. Eine new Expression ruft den new Operator auf und danach den Konstruktor.
Analog dazu gibt der (placement oder nicht) delete Operator nur Speicher frei. Da es aber nur eine normale delete Expression gibt, nicht aber eine placement Form, kann man über eine delete Expression auch kein placement Delete machen. Wenn man es braucht, muss man erst direkt den Destruktor aufrufen und dann den passenden placement-Delete Operator.
Und ein placement delete Operator muss nicht nichts tun.
Sinnvollerweise sollte der (void*, void*) placement delete Operator nichts tun, da der new (size_t, void*) Operator auch nichts tut.
Du kannst aber jederzeit einen new(size_t, MyAllocator*) Operator basteln, der über MyAllocator Speicher besorgt.
Dazu solltest du dann einen placement delete Operator delete(void*, MyAllocator*) machen, der den Speicher auch wieder brav freigibt. Hier einen "leeren" Operator delete(void*, MyAllocator*) zu machen wäre ein grober Fehler.
@volkard:
Mal abgesehen davon was Sinn macht oder nicht...
Man kann placement new für alles mögliche verwenden. Und da gibt es durchaus Varianten wo man weder das delete einfach weglassen kann, noch das "normale" delete verwenden. Wo man also genau das machen muss, was eine placement delete Expression machen würde, wenn es denn eine gäbe.
Das nächstliegende Beispiel wäre wohl ein auf irgendwas spezialisierter Allokator, dem man ganz "klassisch" die freigewordenen Objekte wieder zurück geben muss.
Wie gesagt, mal abgesehen davon ob es Sinn macht oder nicht. Das ist wieder ein anderes Thema. (Und wie man daraus schliessen kann dass ich nicht wusste dass es keine placement delete Expression gibt, habe ich sowas auch noch nie gebraucht/verwendet).