объектов. В стандрате сказано, что lifetime заканчивается в начале вызова деструктора объекта с non-trivial destructor (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf 3.8 1.3). Так же в стандарте сказано, что вызов non-static member function объекта с завершенным Lifetime - это UB.
Получается, что из деструктора объекта с non-trivial destructor нельзя вызывать non-static member function этого объекта?
Что я упускаю?
Всё-таки наверное в КОНЦЕ работы деструктора. Ты видимо перепутал
Возможно, я как-то неправильно трактую, но там написано The lifetime of an object of type T ends when if T is a class type with a non-trivial destructor (12.4), the destructor call starts or (1.4) — the storage which the object occupies is reused or released
Всё правильно, время жизни объекта с конца конструктора до начала деструктора.
Тогда, правильно ли я понимаю, что вызов членов-функций из деструктора - UB?
Нет. http://eel.is/c++draft/class.cdtor#4
Большое спасибо!
нет. Время жизни объектов класса не закончено
мемберов имел ввиду
Я не думаю, что member function обладает lifetime. А речь шла о вызове member function.
ок да, я уже прочитал там ссылки на стандарт. Не задумывался об этом, ибо в конструкторе мембер функции всегда вызывал, а это до начала лайфтайма
Обсуждают сегодня