2012-04-05 7 views
3

Mögliche Duplizieren:
C++'s “placement new”Was ist die Bedeutung des unter Satz in C++

im folgenden Code, was tut Linie 3 darstellt, ist es die Art und Weise der Schublade gesteckt? oder was

void someCode() 
{ 
    char memory[sizeof(Fred)];  // Line #1 
    void* place = memory;   // Line #2 

    Fred* f = new(place) Fred(); // Line #3 
    // The pointers f and place will be equal 

    ... 
} 
+3

Google-Platzierung neu. – RedX

+0

Dies funktioniert wegen der Ausrichtungsanforderungen nicht. Der Typ "Fred" erfordert möglicherweise eine strengere Ausrichtung als "char". Sie sollten stattdessen 'aligned_storage' verwenden, verfügbar in C++ 11 und TR1. –

Antwort

3

Dies ist eine typische Verwendung von Placement new.
Es ermöglicht Ihnen, Speicher zuzuweisen und dann Objekte an diesem bestimmten Speicherort zu konstruieren.

Zeile # 3 ruft im Wesentlichen nur den Konstruktor Fred::Fred() auf. Der this Zeiger im Fred Konstruktor wird place entsprechen. Der zurückgegebene Zeiger f entspricht daher place.

+0

Hey Als, danke für deine Antwort ... wie kann dieser Pointer, also Zeiger auf Fred, gleich void * sein ?, – Naruto

+0

@LLL: Das ist was die Implementierung von placement new für dich tut.Er weist die Adresse von 'place zu 'zu' f'. Dies ist eine Funktionalität, die von der neuen Platzierung bereitgestellt wird. –

+0

Thnx zur Klärung .. das s wat ich wollte .. – Naruto

Verwandte Themen