Рассмотрим следующий пример:
// create some storage
alignas(int) char buffer[2 * sizeof(int)];
// new object of type int at the storage of buffer, the int pointed
// to by p begins its lifetime here, buffer lifetime is over
int* p = new (buffer) int{42};
// some entirely unrelated int
int j = 17;
Допускается ли это для другого хранилища в конце buffer
, часть, которая еще не была использована новым объектом int
, на который указывает p
, должна быть снова открыта в стек и неявно повторно использована последующие объекты автоматического хранения? Другими словами, допустимая реализация позволяет иметь &j == p+1
?
Соответственно, явно ли повторное использование другого хранилища было бы корректным поведением?
alignas(int) char buffer[2 * sizeof(int)];
int* p = new (buffer) int{42};
int* q = new (p+1) int{6};
То есть, оба int
указываются на p
и q
еще в течение их жизней?