C ++: Арифметика указателя на указателе, который указывает на разрушенный элемент массива?C++

Программы на C++. Форум разработчиков
Anonymous
C ++: Арифметика указателя на указателе, который указывает на разрушенный элемент массива?

Сообщение Anonymous »

В CppReerference правила для арифметики указателя включают:


, если p указывает на элементы i -th a Array объект x n код> кода> код> код> код> кода> код> код> кода> код> код> код> код> код> код> код> код> код> код> код> код> код> код или вычитается следующим образом:
-p + j и j + p укажите на i + j -th элемент x
if 0 ≤ i + j < /blockquote>

Как указано там, кажется, что арифметика указателя, такую ​​как Ptr+1 < /code> /ptr ++ < /code>, является четко определенной только в том случае, если PTR указывает на элемент массива (или элемент прошлого-конечности того же массива). Мой вопрос: что, если элемент заостренного массива уже был уничтожен до выполнения арифметики? Чтобы быть ясным, я спрашиваю только о арифметическом этапе (продвижение указателя), а не о последующем доступе к уничтоженному объекту. < /P>
Например, < /p>

Код: Выделить всё

template
constexpr // since C++20
void destroy(ForwardIt first, ForwardIt last)
{
for (; first != last; ++first)
std::destroy_at(std::addressof(*first));
}
Это возможная реализация std :: dressome on cppreference, но обратите внимание, что ++ Первый возникает после того, как объект заостренного впалени (его жизнь закончится).
Я задаюсь вопросом, является ли этот указатель арифмет хорошо определяется или не определено (ub). .>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ay-element

Вернуться в «C++»