170 похожих чатов

Ребят, а когда мы с помощью erase() убираем из vector<T>

какой-то элемент, то память автоматически, которую он занимал, освобождается?

25 ответов

25 просмотров

Все элементы, которые следовали за ним, по цепочке сдвигаются левее. Свободная капасити как следствие вырастает на 1. Освобождения памяти не происходит.

Семен-Кропоткин Автор вопроса
Mikail Bagishov
Все элементы, которые следовали за ним, по цепочке...

Т.е, если, например, если я создал указатель и получил адрес 3-го элемента (100) vector<int> vect, в котором элементы { 1, 10, 100, 1000 }, то если я его уберу, то указатель всё еще будет указывать на значение 100? И при попытке обращения не будет никаких проблем?

Mikail Bagishov
Все элементы, которые следовали за ним, по цепочке...

Но деструктор вызовется, что и будет означать end of life удаленного элемента

Семен Кропоткин
Т.е, если, например, если я создал указатель и пол...

Кажется, по стандарту после указатель на 100 после erase() станет невалидным. Но на 100 он точно указывать не станет, сотни больше нет (а ее место занял другой объект)

Семен-Кропоткин Автор вопроса
Mikail Bagishov
Кажется, по стандарту после указатель на 100 после...

"Место занял другой объект", т.е этот указатель будет указывать на 1000, которая сдвинется влево?

Семен Кропоткин
"Место занял другой объект", т.е этот указатель бу...

Физически - да. Но еще раз повторюсь - кажется, пользоваться таким указателем уже нельзя.

Ivan Sokolov
если его промыть, то мб можно 🌚

я щас подумал. это смотря как вектор передвигает объекты при erase если operator=(T&&), то launder не нужен если dtor + T(T&&), то нужен

Ivan Sokolov
я щас подумал. это смотря как вектор передвигает о...

Какая разница? указатель указывает на валидный объект

Boris Usievich
Какая разница? указатель указывает на валидный объ...

Не указывает, если второй вариант. Будет, когда transparently-replaceable поддержат для подобъектов (тематический DR заводили уже).

Ivan Sokolov
я щас подумал. это смотря как вектор передвигает о...

там будет dtor гарантированно, это же уничтожение элемента

Sergey Anisimov
Не указывает, если второй вариант. Будет, когда tr...

гляжу в доку, про указатели ничего нет (забавно :), но ссылки и итераторы инвалидируются начиная от места удаления элемента.

Boris Usievich
гляжу в доку, про указатели ничего нет (забавно :)...

Указатель и ссылка в этом контексте не равнозначны?

Boris Usievich
гляжу в доку, про указатели ничего нет (забавно :)...

Я пока упускаю, к сожалению, где нормативно описывается invalidation (если вообще). Насчет указателей - это комментарий по подходу с деструктор + конструктор.

Boris Usievich
я не проф. толкователь стандарта :)

судя по тому что DR'ы на тему не прекращаются, там даже проф. толкователи ещё не всё вычесали

Boris Usievich
22.3.11.5 Modifiers [vector.modifiers] в C++20

Не, я вижу описание метода) Хотелось бы почитать именно про "Invalidates iterators and references": семантика должна же прописана быть (иначе действительно не ясно, при чем здесь те же указатели).

Sergey Anisimov
Не, я вижу описание метода) Хотелось бы почитать и...

Семантика простая, этими итераторами и ссылками нельзя пользоваться

Sergey Anisimov
Допустим. А с указателями что?)

Я бы предположил, что в данном контексте указатель и ссылка равнозначны. Разве есть какие-то контейнеры, для которых ссылки и указатели ведут себя по-разному? С итераторами - там да, вопрос отдельный

Андрей Таусинов
Я бы предположил, что в данном контексте указатель...

Моя претензия в том, что это все безосновательные предположения выходят. В нормативах должно быть настолько мало пространства для разночтения, насколько возможно.

Vlad
а вопрос какой?

Инвалидация указателей на элементы вектора после erase

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта