Я только что узнал о конструкции С++ под названием "размещение нового". Он позволяет точно контролировать, на что указывает указатель в памяти. Это выглядит так:
#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
...
}
(пример из С++ FAQ Lite)
В этом примере указатель this
Fred будет равен place
.
Я видел, как он использовался в нашем командном коде один или два раза. Как вы думаете, что делает эта конструкция? У других языков указателей есть подобные конструкции? Для меня это похоже на equivalence
в FORTRAN, что позволяет разным переменным занимать одно и то же место в памяти.