Почему оба указателя в приведенном выше коде имеют одинаковый адрес?
Placement new принимает точный адрес, по которому он будет инициализировать создаваемый объект.Вы передаете тот же адрес, вы получаете тот же адрес.
Означает ли это, что я могу выделить бесконечное количество указателей с новым размещением, даже если у меня есть только 100 байтов?
Нет.Каждое размещение нового повторно использует хранилище.Конечно, вы можете многократно использовать хранилище бесконечно много раз, но вам будет выделено не более 100 одинаковых символов.
Как я могу гарантировать, что SubBlock6 будет иметь нулевой или нулевой предел при использовании нового размещения?
Нет способа.Начало работы - you , чтобы обеспечить действительное хранилище для размещения новых объектов для создания.Если вы этого не сделаете, поведение не определено.
И, наконец, вам не нужно возиться с размещением нового.
char *SubBlock1 = MainBlock;
char *SubBlock2 = MainBlock + 20;
Разделение буфера просто отлично.Только убедитесь, что delete[]
только значение указателя, хранящееся в MainBlock
.