515 Stimmen

Welche Verwendungszwecke gibt es für "Platzierung neu"?

Hat irgendjemand hier jemals die "Platzierung neu" von C++ verwendet? Wenn ja, wofür? Für mich sieht es so aus, als ob es nur auf memory-mapped Hardware nützlich wäre.

7voto

Max Lybbert Punkte 19181

Ich habe gesehen, dass es als Leichter Performance-Hack für einen "dynamischen Typ"-Zeiger (im Abschnitt "Unter der Haube"):

Aber hier ist der Trick, den ich verwendet, um schnelle Leistung für kleine Typen zu erhalten: wenn der Wert gehalten werden kann innerhalb eines void* passen, ich nicht wirklich die Mühe Allokation ein neues Objekt, ich zwingen es in den Zeiger selbst mit Platzierung neu.

5voto

xtofl Punkte 39285

In der Regel wird eine neue Platzierung verwendet, um die Kosten für die Zuteilung einer "normalen Neuware" loszuwerden.

Ein weiteres Szenario, in dem ich es verwendet habe, ist ein Ort, an dem ich Zugang zu den Zeiger auf ein noch zu erstellendes Objekt, um ein Singleton pro Dokument zu implementieren.

5voto

kralyk Punkte 3983

4voto

Raindog Punkte 1418

Skript-Engines können es in der nativen Schnittstelle verwenden, um native Objekte aus Skripten zuzuweisen. Siehe Angelscript (www.angelcode.com/angelscript) für Beispiele.

4voto

Nick Punkte 6782

Der einzige Ort, an dem ich darauf gestoßen bin, ist in Containern, die einen zusammenhängenden Puffer zuweisen und ihn dann nach Bedarf mit Objekten füllen. Wie erwähnt, std::vector könnte dies tun, und ich weiß, dass einige Versionen von MFC CArray und / oder CList tat dies (denn das ist, wo ich zum ersten Mal über sie lief). Die Methode der Pufferüberbelegung ist eine sehr nützliche Optimierung, und die neue Platzierung ist so ziemlich die einzige Möglichkeit, Objekte in diesem Szenario zu konstruieren. Es wird auch manchmal verwendet, um Objekte in Speicherblöcken zu konstruieren, die außerhalb Ihres direkten Codes zugeordnet sind.

Ich habe es in einer ähnlichen Funktion verwendet, obwohl es nicht oft vorkommt. Es ist jedoch ein nützliches Werkzeug für die C++-Toolbox.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X