170 похожих чатов

Https://En.Cppreference.Com/W/Cpp/Language/Lifetime Тут написано что access to non static member functions за

пределами времени жизни это УБ, в то же время жизнь заканчивается с начала вызова деструктора, и в то же время где то написано было что member functions можно вызывать во время деструкции. Как правильно?

20 ответов

24 просмотра

Где это было написано? То, что это уб, правильно

cppreference плохо стандарт пересказали тут

Pepe 🐸- Автор вопроса
Liber Azerate
Где это было написано? То, что это уб, правильно

Member functions, including virtual functions (10.3), can be called during construction or destruction (12.6.2).

https://eel.is/c++draft/basic.life#6 > Before the lifetime of an object has started but .... > For an object under construction or destruction, see [class.cdtor]. https://eel.is/c++draft/class.cdtor#4 > Member functions, including virtual functions ([class.virtual]), can be called during construction or destruction ([class.base.init]).

Pepe 🐸- Автор вопроса
Liber Azerate
Где это было написано? То, что это уб, правильно

https://stackoverflow.com/questions/37960088/accessing-owner-in-destructor-c

Pepe 🐸- Автор вопроса
Egor Suvorov
https://eel.is/c++draft/basic.life#6 > Before the...

да, так как все таки правильно?

Sergey Skvortsov
Не ub, конечно

Да, видимо не надо было доверять цппрефу и сразу открыть стандарт

Pepe 🐸
да, так как все таки правильно?

Жизнь объекта заканчивается в момент начала деструктора, но в процессе работы деструктора некоторые операции всё ещё можно делать

Pepe 🐸- Автор вопроса
Egor Suvorov
Жизнь объекта заканчивается в момент начала дестру...

Access outside of lifetime Before the lifetime of an object has started but after the storage which the object will occupy has been allocated or, after the lifetime of an object has ended and before the storage which the object occupied is reused or released, the following uses of the glvalue expression that identifies that object are undefined: 1 Lvalue to rvalue conversion (e.g. function call to a function that takes a value). 2 Access to a non-static data member or a call to a non-static member function.

Pepe 🐸- Автор вопроса
Pepe 🐸
Access outside of lifetime Before the lifetime of ...

вот тут именно про outside of lifetime с cppreference

Egor Suvorov
https://eel.is/c++draft/basic.life#6 > Before the...

А часть про виртуальный функции не меняли? Насколько помню было что-то плохое с вызовом pure-virtual функций в конструкторе

Pepe 🐸
Access outside of lifetime Before the lifetime of ...

Да, но [class.cdtor]/4 явным образом это дело частично разрешает

Max Kolesnikov
А часть про виртуальный функции не меняли? Насколь...

Нет, там плохо потому что в конструкторе мы "не видим" своего наследника и pure virtual ещё ни с кем не связана

Egor Suvorov
Нет, там плохо потому что в конструкторе мы "не ви...

То есть она в принципе не зовется и на этапе компиляции это ломается?

Max Kolesnikov
То есть она в принципе не зовется и на этапе компи...

Увы, ломается в рантайме. Но наверняка будет предупреждение компилятора

Egor Suvorov
Да, но [class.cdtor]/4 явным образом это дело част...

Да и [class.cdtor]/3 явным образом разрешает, например, обращаться к полям: > ... To form a pointer to (or access the value of) a direct non-static member of an object obj, the construction of obj shall have started and its destruction shall not have completed, otherwise the computation of the pointer value (or accessing the member value) results in undefined behavior.

Pepe 🐸- Автор вопроса
Egor Suvorov
Да и [class.cdtor]/3 явным образом разрешает, напр...

спасибо, видимо в сппреф неправильно стандарт описан

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта