Как работает статический вектор?

Знаю что статическим переменным выделяется память при старте программы. Тогда что произойдет при запросе у статического вектора (или у других подобных контейнерах) на выделение и очистку памяти?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Случится всё тоже самое что и с обычным вектором. Статические вектора отличаются только временем жизни - они конструируются до входа в 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")
→ Ссылка