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测试了这个例子并且没有崩溃,但我不确定它是否适用于其他编译器。
答案 0 :(得分:2)
当getFoo
按值返回时,它会创建Foo
对象的(另一个)副本。之后,auto_ptr
删除原始对象并不重要。
相当奇怪的代码,使用auto_ptr
然后创建副本。
答案 1 :(得分:1)
这是非常奇怪的代码,但是,是的 - 它是有保证的。没有RVO,或移动语义,所以应该没问题。