Делает ли ссылка на внешний указатель на поле удаленной структуры указатель на значения мусора в C ++? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть фундаментальное сомнение относительно освобождения структуры и использования указателя в C ++.

Предположим, у меня есть следующий сценарий:

...
struct B
{
    ...
    struct A a_field;
    ...
}
...
struct A* a_ref;
vector<struct B> b_vec;
...
// populate, use and modify b_vec elements here
...
a_ref = &(b_vec[i].a_field); // can be a one-time assignment
...
// deallocate b_vec elements here (including b_vec[i]) here
...
// using a_ref->some_field here !?!
...

Is a_ref все еще собирается указывать на последнийизмененное состояние a_field из b_vec[i], что делает его более надежным для использования в дальнейшем?

Или освобождение C ++ - STL сделает все поля b_vec[i] ненадежными (значение мусора), когда он его выдвигаетвне вектора?

1 Ответ

0 голосов
/ 17 ноября 2018

Если вы удерживаете указатель на элемент std::vector, этот указатель может быть признан недействительным несколькими способами. Например, если std::vector уничтожен или если std::vector необходимо перераспределить память, когда она увеличивается.

Разыменование висящего указателя - неопределенное поведение. Это логическая ошибка, и ее следует избегать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...