Как работает статический вектор?
Знаю что статическим переменным выделяется память при старте программы. Тогда что произойдет при запросе у статического вектора (или у других подобных контейнерах) на выделение и очистку памяти?
Ответы (1 шт):
Случится всё тоже самое что и с обычным вектором. Статические вектора отличаются только временем жизни - они конструируются до входа в main и разрушаются после выхода из main. Буфер с данными выделяется в обычной куче. Все ваши манипуляции будут влиять на него - выделять, удалять и т.п.
Дополнение:
Всё выше относится к статическим переменным объявленным на уровне файла. Статическая переменная внутри функции (локальная) конструируется в момент первого вызова функции и живёт до выхода из main:
#include <iostream>
class C {
public:
C(const char *name) : name(name) {
std::cout << "C(\"" << name << "\")\n";
}
~C() {
std::cout << "~C(\"" << name << "\");\n";
}
private:
const char *name;
};
static C c1("static file");
void f() {
std::cout << "f {\n";
C c2("local");
static C c3("static local");
std::cout << "f }\n";
}
int main() {
std::cout << "main {\n";
f();
std::cout << "main }\n";
}
Печатает:
C("static file")
main {
f {
C("local")
C("static local")
f }
~C("local")
main }
~C("static local")
~C("static file")