Was genau ist der new-Platzierungsoperator
-
Hallo,
ich lese gerade "Modernes C++-Design" von Alexandrescu. Wie es aussieht bin ich noch nicht ganz reif dafür :). Ich verstehe folgende Policy-Klasse nicht ganz:
template <class T> struct MallocCreator { static T* Create() { void* buf = std::malloc(sizeof(T)); if (!buf) return 0; return new(buf) T; } };Um genau zu sein, das hier nicht:
return new(buf) T;Wenn man malloc für Klassenobjekte aufrufen würde, würde ja der Konstruktor nicht aufgerufen werden. Kann es sein, dass "new(buf) T" genau das macht ohne jedoch nochmal Speicher zu allozieren?
Ich freue mich auf Hilfe und sage schon mal danke.
Gruß
-
Placement new konstruiert ein Objekt in bereits allozierten Speicher rein. In diesem Fall wird ein T in buf konstruiert.
-
eifrig_lernender schrieb:
Kann es sein, dass "new(buf) T" genau das macht ohne jedoch nochmal Speicher zu allozieren?
So ist es - es wird einfach der Constructor aufgerufen.
-
Dankeschön. Das deckt sich ja dann mit meiner Vermutung.