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

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

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

6

Решение

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

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

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

11

Другие решения

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

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

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

2

По вопросам рекламы [email protected]