Уничтожит ли разрушитель статический член?

Скажем, у меня есть:

class A
{
    A()
    {}
    ~A()
    {}
};

class B
{
public:
    B()
    {}
    ~B()
    {}
private:
    static A mA;
};

B* pB = new B; 
delete pB;

Когда я вызываю delete pB, будет вызван деструктор B. Позже это вызовет деструктор для статического члена A?

Ответы

Ответ 1

Ключевое слово static означает, что переменная не зависит от экземпляров. Вот почему вы можете получить доступ к статическим переменным и методам без создания экземпляра объекта из класса в первую очередь. Поэтому уничтожение экземпляра не повлияет на какие-либо статические переменные.

Ответ 2

Конечно нет. Прежде всего, вы определили явный пустой деструктор. И если деструктор по умолчанию сделал это, вы никогда не смогли бы уничтожить экземпляры, не рискуя сделать класс непригодным.

Ответ 3

С++ Standard 03, 9.4.2 Статические члены данных:

Статический член данных не является частью подобъекты класса. Там есть только одна копия статического элемента данных разделяемых всеми объектами class.class.

Статический член данных не является частью класса - следовательно, он не привязан к классу жизни, ни при построении, ни разрушении.

Конструкция (9.4.2/3)

Как только элемент статических данных был он существует, даже если нет объектов его класса были созданы. Его класс был создан.

Разрушение (9.4.2/7)

Элементы статических данных инициализируются и уничтожаются точно так же, как нелокальные объекты.

Ответ 4

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

Конструкция/уничтожение экземпляров объекта не влияет на создание или уничтожение статического элемента.

Ответ 5

Статические элементы не живут в памяти, назначенной экземпляру класса. Поэтому он не будет удален или деинициализирован, если вы не сделаете это явно в какой-либо части вашего кода (включая деструктор класса, но ваша логика кода должна обрабатывать возможность наличия нескольких экземпляров и т.д.)

Ответ 6

Статические переменные также известны как переменные класса. Это в отличие от переменных экземпляра. Как следует из этих имен, переменные класса относятся ко всему классу, где переменные экземпляра относятся к экземпляру. На основе этих фактов можно определить продолжительность жизни этих переменных.

Другой способ взглянуть на это предполагает, что вызов деструктора фактически уничтожает статические переменные. Представьте, что следствие одного объекта получает экземпляр, а затем удаляется. Что произойдет с статическими переменными, которые будут использоваться всеми другими объектами класса, которые все еще используются.