2012-01-28 2 views

ответ

7

23.2.3 §4 говорит:

a.clear() [...] аннулирует все ссылки, указатели и итераторы, относящиеся к элементам a и может привести к аннулированию пришедших к конечному итератору.

Поскольку не существует такого понятия, как «не-признания недействительными», с использованием ptr после clear результатов в непредсказуемое поведение.

На боковой ноте скобки в &(myvector[0]) не нужны. Операторы Postfix всегда имеют более высокий приоритет, чем префиксные операторы в C++, поэтому запись &myvector[0] в порядке.

+0

Ах. Спасибо, я стою исправлено. – wilhelmtell

3

Это может быть указание на мусор. vector перераспределяет память по мере необходимости, когда экземпляр растет или сжимается, поэтому вы не можете полагаться на адрес, который не меняется. Вот почему типы, используемые для vector, должны подчиняться STL-совместимым ограничениям, таким как способность копирования. Вот почему auto_ptr небезопасен в контейнерах STL.

Смежные вопросы