Ich frage mich, ob es einen Trick gibt, um einen Konstruktor explizit mit dem Objektzeiger aufzurufen. Wenn das eine legale Syntax wäre, würde es so aussehen:
%Vor% P.S. Ich weiß, dass ich Foo *p = new Foo();
kann, aber es gibt einen ernsthaften Grund, malloc () explizit zu verwenden.
Sie können dafür den Operator "placement new" verwenden:
%Vor%Verwenden Sie Platzierung neu :
%Vor%(hier werden keine Speicherüberprüfungen vorgenommen)
Grundsätzlich erstellt new(address) Foo()
ein Objekt vom Typ Foo
in der Position, auf die address
zeigt, mit anderen Worten: es ruft den Konstruktor auf.
Sie können ein neues Objekt an einer Adresse mit der neuen Platzierung erstellen.
%Vor%Sie können mehr unter Wikipedia Artikel darüber
lesen Andere haben bereits darauf hingewiesen, dass Sie Placement neu verwenden können. Dies funktioniert gut, wenn Sie möchten, dass bestimmte spezifische Objekte einer Klasse im Speicher mit malloc
belegt werden. Wie bereits erwähnt wurde, müssen Sie das dtor explizit aufrufen, wenn Sie dies tun.
Wenn Sie möchten, dass alle Objekte einer Klasse im Speicher mit malloc
belegt sind, können Sie operator new
(und operator delete
) für diese Klasse überladen und sie% co_de aufrufen lassen % um den rohen Speicher zu erhalten. Dies entlastet den Client-Code von den zusätzlichen Schritten der separaten Zuweisung / Initialisierung.
Wenn Sie möchten, dass alle Objekte in einer Sammlung (oder mehr als einer Sammlung) im Speicher mit malloc
belegt sind, können Sie der Sammlung einen Zuordner zuweisen, um dies zu ermöglichen. Auch dies entlastet den Client-Code von der Zuordnung und lässt den Container wie einen normalen Container aussehen, handeln und "fühlen".
Tags und Links c++