Каковы варианты использования конструкции C ++ «размещение нового»? - PullRequest
13 голосов
/ 12 декабря 2008

Я только что узнал о конструкции C ++, называемой "размещение нового". Это позволяет точно контролировать, куда указатель указывает в памяти. Это выглядит так:

 #include <new>        // Must #include this to use "placement new"
 #include "Fred.h"     // Declaration of class Fred

 void someCode()
 {
   char memory[sizeof(Fred)];
   void* place = memory;

   Fred* f = new(place) Fred();   // Create a pointer to a Fred(),
                                  // stored at "place"

   // The pointers f and place will be equal

   ...
 } 

(пример из C ++ FAQ Lite )

В этом примере указатель this Фреда будет равен place.


Я видел, как он использовался в коде нашей команды один или два раза. По вашему опыту, что позволяет эта конструкция? У других языков указателей есть подобные конструкции? Мне кажется, это напоминает equivalence в FORTRAN, который позволяет разным переменным занимать одно и то же место в памяти.

Ответы [ 12 ]

0 голосов
/ 13 декабря 2008

Я использовал его для создания объектов на основе памяти, содержащей сообщения, полученные из сети.

0 голосов
/ 12 декабря 2008

мне кажется способом размещения объекта в стеке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...