Хранилище изначально , выделить d для автоматического объекта. Новое место размещения затем повторно использует s, это хранилище для динамического объекта.
Стандарт, как представляется, не определяет значение слова «получить» в отношении выделения и повторного использования. Если бы он ограничивался тем же, что и «выделить», то это был бы избыточный термин, поэтому разумно предположить, что он охватывает как распределение, так и повторное использование.
При такой интерпретации хранилище будет иметьбыли получены при размещении нового выражения. И действительно, значение будет неопределенным. Есть способ сохранить значение:
int a = 0;
int orig = a;
new (&a) int(orig);
Достойный оптимизирующий компилятор может видеть, что копии являются избыточными. Для массивов то же самое может быть достигнуто с помощью memcpy
, и они могут быть оптимизированы слишком долго, пока длина постоянна.