it-swarm.com.de

Neues C++ Objekt an bestimmter Speicheradresse erstellen?

Ist es in C++ möglich, ein neues Objekt an einem bestimmten Speicherort zu erstellen? Ich habe einen gemeinsamen Speicherblock, in dem ich ein Objekt erstellen möchte. Ist das möglich?

34
Chris

Sie möchten Platzierung new () . Es ruft den Konstruktor im Prinzip auf, indem ein vorhandener Speicherblock verwendet wird, anstatt neuen Speicher aus dem Heapspeicher zuzuweisen.

Edit: Vergewissere dich, dass du den Hinweis verstanden hast, dass du den Destruktor explizit für Objekte benennen solltest, die mit der Platzierung new() erstellt wurden, bevor du ihn benutzt!

60
D.Shawley

Ja. Sie müssen die Platzierungsvariante des Operators new () verwenden. Zum Beispiel:

void *pData = ....; // memory segment having enough space to store A object
A *pA = new (pData) A;

Bitte beachten Sie, dass die Platzierung neu keine Ausnahme auslöst.

11
dimba

wenn Sie viele feinkörnige Objekte zuordnen möchten, verwenden Sie am besten eine neue Platzierung in Verbindung mit einer Art Ringpuffer. Andernfalls müssen Sie die Zeiger neben den Objektzeigern selbst verfolgen.

1
geva30

Angenommen, Sie haben einen Zeiger auf den Speicherort, an dem Sie ein Objekt platzieren möchten, ich glaube, man kann den Zeiger auf einen neuen Typ umwandeln und dann ein Objekt an der Stelle dieses Zeigers platzieren. Dies ist eine Lösung, die kein new () erfordert.

In Anbetracht Ihrer Erinnerung: 

// you would use the pointer you have to your allocation of memory char* mem_start = new char[1024]; // Now we have 1024 bytes to play with

Man kann es einem bestimmten Typ zuweisen:

CustomType* object_ptr = (CustomType*) mem_start;

Zuletzt können Sie dort ein Objekt erstellen:

*(object_ptr) = CustomType();

0
AndruAllen

MapViewOfFileEx und VirtualAllocEx erlauben unter Windows die Angabe einer bevorzugten virtuellen Adresse. Keine Garantien.

0
PatrickvL