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.
Antworten
Zu viele Anzeigen?Es ist nützlich, wenn Sie einen Kernel erstellen - wo platzieren Sie den Kernelcode, den Sie von der Festplatte lesen, oder die Seitentabelle? Sie müssen wissen, wohin Sie springen müssen.
Oder in anderen, sehr seltenen Fällen, z. B. wenn Sie viel Platz zur Verfügung haben und ein paar Gebäude hintereinander platzieren möchten. Sie können auf diese Weise gepackt werden, ohne dass der offsetof()-Operator benötigt wird. Dafür gibt es aber auch andere Tricks.
Ich glaube auch, dass einige STL-Implementierungen die neue Platzierung verwenden, wie std::vector. Sie weisen auf diese Weise Platz für 2^n Elemente zu und müssen nicht immer neu zuweisen.
Es ist auch nützlich, wenn Sie globale oder statisch zugewiesene Strukturen neu initialisieren wollen.
Die alte C-Methode war die Verwendung von memset()
um alle Elemente auf 0 zu setzen. Das ist in C++ aufgrund von vtables und benutzerdefinierten Objektkonstruktoren nicht möglich.
Daher verwende ich manchmal Folgendes
static Mystruct m;
for(...) {
// re-initialize the structure. Note the use of placement new
// and the extra parenthesis after Mystruct to force initialization.
new (&m) Mystruct();
// do-some work that modifies m's content.
}