-1

auto_ptrC++ 标准是否保证在从函数中按值返回有效负载时不会发生崩溃:

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 测试了这个例子,没有崩溃,但我不确定它是否可以与其他编译器一起使用。

4

2 回答 2

2

作为getFoo按值返回,它创建(又一个)Foo对象的副本。之后,原始对象被auto_ptr.

不过,相当奇怪的代码,无论如何都要使用auto_ptr然后创建一个副本。

于 2012-02-19T11:45:29.467 回答
1

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

于 2012-02-19T11:13:13.587 回答