Примечание. Этот вопрос изначально был задан как комментарий Ryan Haining на этот ответ.
struct A { std::string const& ref; };
// (1)
A a { "hello world" }; // temporary lifetime is extended to that of `a`
std::cout << a.ref << std::endl; // safe
// (2)
A * ptr = new A { "hello world" }; // lifetime of temporary not extended?
std::cout << ptr->ref << std::endl; // UB: dangling reference
Вопрос
- Почему время жизни временного расширения в (1), но не в (2)?