Итак, я увидел this question, в котором в основном говорится, что ссылки и итераторы недействительны вместе.Почему ссылки никогда недействительны?
Я понимаю, почему итераторы признаны недействительными в некоторых случаях, но Почему ссылки недействительны?
С практической точки зрения, я не понимаю, почему это требуется.
Было ли это просто дизайнерским решением или есть какая-то практическая причина?
EDIT: Чтобы уточнить, насколько я понимаю основную структуру, это просто указатели на данные, которые необходимо будет перераспределена (данные (и, таким образом, ссылка на него) может оставаться без изменений). Правильно?
Некоторый тест-код:
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<string> yourVect;
yourVect.push_back("def");
vector<string>::iterator iter = yourVect.begin();
const string& ref = *iter;
yourVect.insert(yourVect.begin(), "abc");
cout << ref << endl; // !! --- doesn't work - why ?? --- !!
cout << *iter << endl; // obviously doesn't work
}
вектор может быть перераспределен – sashoalm
Как вы думаете, ваша ссылка является ссылкой на то, когда базовое динамическое распределение, которое оно было инициализировано, было уничтожено из-под нее? – WhozCraig
Я не понимаю, как вы можете перемещать объекты в новое место после перераспределения и все еще ожидать, что старые все еще будут там ?! – Mehrdad