从函数返回C ++中的auto_ptr有效负载

时间:2012-02-19 06:14:54

标签: c++ memory-management auto-ptr

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测试了这个例子并且没有崩溃,但我不确定它是否适用于其他编译器。

2 个答案:

答案 0 :(得分:2)

getFoo按值返回时,它会创建Foo对象的(另一个)副本。之后,auto_ptr删除原始对象并不重要。

相当奇怪的代码,使用auto_ptr然后创建副本。

答案 1 :(得分:1)

这是非常奇怪的代码,但是,是的 - 它是有保证的。没有RVO,或移动语义,所以应该没问题。