Placement new.



  • Hi, eine weitere Facette von C++ von der ich bisher maximal was gehört hab ist das Placement new.
    Dazu ein paar Fragen. Naja, zunächst nur eine aber es werden sicherlich noch welche folgen.

    int main()
      {
      char buffer[100];
      int* example(new(buffer) int(4));
      }
    

    Sehe ich das richtig, dass hier der Speicher für example in dem Buffer auf dem Stack allokiert wird und demnach auch kein delete benötigt wird? (Also zumindest nicht was Memory Leaks angeht)?



  • Ich vermute mal, dass bei fehlendem delete der Destruktor nicht aufgerufen wird.



  • ja, das macht natürlich Sinn, daran hab ich gar nicht gedacht.
    Aber in dem Fall mit dem int macht es nichts, oder?



  • JustAnotherNoob schrieb:

    ja, das macht natürlich Sinn, daran hab ich gar nicht gedacht.

    Nein, macht es nicht. Bei Placement New wird kein Speicher angefordert, also muss auch nichts freigegeben werden.

    Dennoch würde ich davon abraten. Erstens bearbeitest du den Stack und zweitens versuchst du, int* in char* hinzubiegen. Placement New ist dazu da, ein per new allokierter Speicher mit einem Objekt zu belegen, also wenn man separat allokiert und konstruiert.


Log in to reply