я немного запутался в последнее время о распределении памяти (де) из std::vectors
Вопросы по memorybehavior векторов
Давайте предположим, что я нормальный вектор целого числа: std::vector<int> intv;
Когда я push_back
некоторые int
«S Произрастает по времени. И когда я покидаю область действия (т. Е.) Функции, она освобождается без необходимости дополнительных вызовов.
Отлично. Еще один пример:
struct foo_t{
std::string bar:
unsigned int derp;
}
void hurr(){
std::vector<foo_t> foov;
foo_t foo;
foo.bar = "Sup?";
foo.derp = 1337;
foov.push_back(foo);
}
Хорошо. Когда я вызываю hurr()
, вектор создается, создается экземпляр foo_t
, экземпляр заполняется и переносится на вектор. Поэтому, когда я покидаю функцию, вектор становится освобожденным, и содержимое (здесь одно foo_t
) также освобождается?
Следующий пример:
struct foo_t{
std::string bar:
unsigned int derp;
}
std::vector<foo_t> hurr(){
std::vector<foo_t> foov;
foo_t foo;
foo.bar = "Sup?";
foo.derp = 1337;
foov.push_back(foo);
return foov;
}
В моем понимании, вектор и его содержимое живут в стеке, который получает (в конечном счете) переписывается времени и вектор я вернулся, и его содержание будет бесполезно. Или он действительно возвращает копию вектора с копией его содержимого (для этого требуется экземпляр Copy-Constructor, если он не POD)?
И что-то очевидное:
struct foo_t{
std::string bar:
unsigned int derp;
}
std::vector<foo_t*> hurr(){
std::vector<foo_t*> foov;
foo_t foo = new foo_t;
foo->bar = "Sup?";
foo->derp = 1337;
foov.push_back(foo);
return foov;
}
Теперь я должен вручную перебрать вектор, удалите его содержимое, а затем я могу смело пусть вектор выпасть из сферы, не так ли?
_ «Теперь мне нужно вручную перебирать вектор, удалять его содержимое, а затем я могу смело разрешить вектор выпадать из сферы действия, правильно?» _ Да. –
«Теперь мне нужно вручную перебирать вектор, удалять его содержимое, а затем я могу смело позволить вектору выпасть из области действия, верно?» Это приведет к недействительности указателей в возвращаемом векторе. Если это не то, что вы хотите, и это, вероятно, нет, вы не должны. – molbdnilo
@molbdnilo Зависит от того, когда предполагается _Now_. –