【发布时间】:2011-11-23 09:55:11
【问题描述】:
我的头很痛:我已经阅读了很多关于 C++11x 移动语义的博客,以至于我的大脑已经变得糊涂了,所以请有人给我一个简短但甜蜜的指南,告诉我如何使以下代码有效地工作?给定一个 Foo 类,我希望能够编写以不同状态返回 Foo 对象的函数(有时称为源函数),并尽可能高效地执行此操作。
class Foo {
// Some methods and members
};
Foo getFirstFoo() {
Foo foo;
// Do some things to foo
return foo;
}
Foo getSecondFoo() {
Foo foo;
// Do some different things to foo
return foo;
}
int main() {
Foo f = getFoo();
// use f ...
f = getSecondFoo();
// use f ...
return 0;
}
我不想对Foo 进行太多修改,其想法是允许通过各种非成员源函数创建各种Foo 对象,因此添加更多的构造函数将丢失点。
在 C++03 中,我的选择是将返回的对象包装在 auto_ptr 中(一个很大的缺点是接收者代码需要知道处理智能指针),或者交叉手指并希望一些可能会进行某种优化(可能是main 中的第一行,第二行则较少)。 C++11x 似乎通过移动语义提供了更好的东西,但我将如何利用这些呢?所以我需要改变对象在源函数中的返回方式,或者向Foo添加一些移动构造函数,或者两者兼而有之?
【问题讨论】: