Expliziter Konstruktoraufruf

7

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.

    
JMH 26.05.2011, 17:26
quelle

5 Antworten

16

Sie können dafür den Operator "placement new" verwenden:

%Vor%     
Matias Valdenegro 26.05.2011 17:29
quelle
9

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.

    
Alexander Gessler 26.05.2011 17:30
quelle
3

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     
Nekuromento 26.05.2011 17:32
quelle
3

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".

    
Jerry Coffin 26.05.2011 17:38
quelle
0
%Vor%     
tim 06.08.2011 05:31
quelle

Tags und Links