Каково время жизни члена класса C ++. Например, когда std::fstream
из Foo
объект будет выпущен? При входе в деструктор или при выходе из деструктора? Это определено в стандарте C ++?
struct Foo
{
std::fstream mystream;
~Foo()
{
// wait for thread writing to mystream
}
};
mystream
элемент данных уничтожается при уничтожении Foo
объект, после тело ~Foo()
выполнен. C ++ 11 §12.4 [class.dtor] / 8 гласит:
После выполнения тела деструктора и уничтожения любых автоматических объектов, размещенных в теле, деструктор для класса
X
называет деструкторы дляX
Прямые не вариантные нестатические члены данных, деструкторы дляX
Прямые базовые классы и, еслиX
является типом самого производного класса, его деструктор вызывает деструкторы дляX
Виртуальные базовые классы.
mystream
является не вариантным, нестатическим членом данных Foo
(а вариант член данных является членом профсоюза; Foo
это не союз).
Это обратная конструкция:
конструкция: базовые классы, данные членов (
mystream
построено здесь), тело конструкторауничтожение: тело деструктора, члены данных (
mystream
уничтожены здесь), базовые классы