Гарантирует ли стандарт C ++, что здесь не будет сбоев при возврате полезной нагрузки auto_ptr
по значению из функции:
class Foo { ... };
std::auto_ptr<Foo> createFoo() {
return std::auto_ptr<Foo>(new Foo(...));
}
...
Foo getFoo() {
std::auto_ptr<Foo> foo(createFoo());
return *foo; /// would be here a crash?
}
/// main
const Foo& foo(getFoo());
Что здесь происходит в соответствии со стандартом: *foo
копируется, затем foo
уничтожается и, наконец, выполняется return
? Или есть другой порядок шагов?
Я протестировал этот пример с GCC, и не было сбоев, но я не уверен, что он будет работать с другими компиляторами.