Die Codezeile:
B* b = new (a) B(some initial values...);
ist ein "placement new" verwenden.
Das Standardverhalten; Es erstellt das neue Objekt vom Typ B
an demselben Speicherort wie das Objekt a
. Wenn für die neue Platzierung eine Überladung vorhanden ist, ist das Verhalten wie in der Überladung codiert, was auch ein Verhalten des Standardtyps beinhalten könnte.
Der Code muss mit allen möglichen Überlastungen, Speicherlayout der Objekte und wie die Klassen A
und B
zueinander in Beziehung stehen in Betracht gezogen werden.
Es ist ungewöhnlich, ein Objekt über dem Ort eines zuvor erstellten Objekts zu erstellen. Ich würde mir vorstellen, dass hier ein Code zwischen den beiden beiden vorhanden ist, der das vorherige Objekt a
dekonstruiert (aber immer noch den Speicher "allokiert" lässt), bevor er an seiner Stelle das neue Objekt erstellt.
Die isocpp FAQ hat einige weitere Hinweise zur Verwendung dieser Technik und ihrer Gefahren.
Google "Platzierung neu" – Bathsheba
einige Haarspalterei: Dies ist nicht der Konstruktorcode, aber dieser Code ruft den Konstruktor auf. – user463035818
Aber es sieht seltsam aus, Placement neu auf einer anderen Klasseninstanz zu verwenden - A. – marcinj