https://en.cppreference.com/w/cpp/language/lifetime в разделе " Примечания " содержит этот код, воспроизведенный здесь:
struct A {
int* p;
~A() { std::cout << *p; } // if n outlives a, prints 123
};
void f() {
A a;
int n = 123; // if n does not outlive a, this is optimized out (dead store)
a.p = &n;
}
Что он пытается сказать в этом разделе заметок?
Из того, что я понимаю, код UB (или он), так как ясно, что n
не переживает a
.
Что это значит под:
разница в правилах окончания срока службы между объектами, не относящимися к классу (конец срока хранения), и объектами класса (обратный порядок построения)
Но это не говорит о том, как.
Я очень смущен всем этим разделом.