Время жизни членов класса C++

Каково время жизни члена класса C++. Например, когда std::fstream из Foo объект будет выпущен? При входе в деструктор или при выходе из деструктора? Это определено в стандарте C++?

struct Foo
{
    std::fstream mystream;
    ~Foo()
    {
        // wait for thread writing to mystream
    }
};

2 ответа

Решение

mystream элемент данных уничтожается при уничтожении Foo объект, после тела ~Foo() выполнен. C++11 §12.4[class.dtor]/8 гласит:

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

mystream является не вариантным, нестатическим членом данных Foo (вариантный член данных является членом союза; Foo это не союз).

Это обратная конструкция:

конструкция: базовые классы, данные членов (mystream построено здесь), тело конструктора

уничтожение: тело деструктора, члены данных (mystream уничтожены здесь), базовые классы

Другие вопросы по тегам