[英]Return auto_ptr payload by value in C++ from function
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上测试了此示例,没有崩溃,但是我不确定它是否可以与其他编译器一起使用。
当getFoo
按值返回时,它将创建Foo
对象的副本(还有另一个)。 在那之后,原始对象被auto_ptr
删除并不重要。
但是,要使用auto_ptr
然后创建一个副本,这倒是相当奇怪的代码。
这是非常奇怪的代码,但是,可以保证。 没有RVO或移动语义,因此应该可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.