Когда удаляется static поле класса?

153
11 января 2020, 06:20

В какой момент будет удалено статическое поле класса, если деструктор класса виртуальный?

class gameObj : public basicObj
{
    public:
        gameObj(){
            arr.push_back(this);
        }
        virtual ~gameObj()
        {}
    protected:
        static vector<basicObj *> arr;
}

И ещё один вопрос. Если удалить базовый класс (имеющий виртуальный деструктор), удалятся ли поля класса-потомка?

Answer 1

Если статическое поле класса было создано (сконструировано), то удаляться (деструктироваться) оно будет при завершении программы. Относительный порядок удаления объектов со статическим классом хранения является обратным по отношению к относительному порядку их создания.

В каком порядке это поле будет создано (и будет ли создано вообще) зависит том числе и от расположением определения этого поля в коде программы. Определение вы в своем примере не привели.

К деструктору класса все это не имеет никакого отношения.

Answer 2

Виртуальность деструктора не при чем. Удаление объектов класса тоже не при чем.

Статические поля (нешаблонных) классов всегда создаются при запуске программы и (в обратном порядке) удаляются при завершении программы.

READ ALSO
Поиск по условию и вывод из вектора

Поиск по условию и вывод из вектора

Есть vector<string> words; со словами, взятыми из файла

196
Требуется спецификатор типа: вложенные классы. C++

Требуется спецификатор типа: вложенные классы. C++

При попытке инициализации члена класса, являющегося при этом объектом вложенного класса, возникает ошибкаВот код:

403