Мой вопрос в том, вижу ли я странное поведение программы из-за того, что внутренний вектор выходит за рамки (уничтожается) цикла ниже
Из-за количества произведенных данных их довольно сложно протестировать, поэтому мне было интересно, может ли кто-нибудь прямо дать мне ответ.
У меня есть большой (STL) вектор или пары, которые, в свою очередь, содержат int и вектор
vector<pair<int, vector<int>>> vectorOfmyTypes
Я изменяю размер некоторых данных
vectorOfmyTypes.reserve(1000000)
Внутри цикла я генерирую пару>, где вектор имеет переменную длину. Я обнаружил, что когда я объявляю вектор в стеке, позже в моей программе возникает странное поведение, но объявление его в куче исправляет это.
Например, код ниже:
while( <1000000) {
vector<int> stackVector;
stackVector.push_back(1);
vectorOfmyTypes.pushback(make_pair(1,stackVector);
}
У меня сложилось впечатление, что всем временем жизни объекта будет управлять векторный объект STL. Это неправильно? Действительно ли vectorOfmyTypes все еще содержит допустимый stackVector, когда он теряет область действия?
Я хочу по возможности избегать использования кучи, так как не хочу очищать память/иметь дело с утечками памяти.
Пожалуйста, дайте мне знать, что вы думаете
Спасибо
push_back
вставляетеvector
, копия помещается. Эта часть вашего кода не должна иметь странного поведения. - person Sergey Kalinichenko   schedule 20.03.2014stackVector
является вектором стека только в названии: его данные хранятся в куче. - person Sergey Kalinichenko   schedule 20.03.2014