Я только что узнал о конструкции 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, который позволяет разным переменным занимать одно и то же место в памяти.