我有一个关于移动构造函数的性能问题,伪C++类:性能与元组成员对象的移动构造函数的
typedef tuple<std::string, std::vector<double>, ...and more...> FooTupleMember;
class Foo1
{
public:
Foo1::Foo1 (Foo1&& object) :
member (std::move (object.member))
{
// ...
}
private:
FooTupleMember member;
};
class Foo2
{
public:
Foo2::Foo1 (Foo2&& object) :
member (std::move (object.member))
{
// ...
}
private:
std::unique_ptr<FooTupleMember> member;
};
当我移动Foo1类的对象时,它会初始化所有对象的移动构造函数存储在元组中吗?这意味着,移动操作可能非常昂贵。
但我谨foo2的类整个移动操作的对象就是要快得多,因为我只通过存储在智能指针数据的内部指针,对不对?
R值参考比l值尊敬更快,因为需要少得多的复制操作,这是显而易见的。然而,使用移动构造函数从函数返回对象仍然更昂贵,然后将相同的对象存储在智能指针中并返回智能指针。
通过l值移动对象非常慢,通过智能指针移动它非常快,并通过r值移动它在中间的某处。
我没有看到r值的“权力”,因为它没有许多人所说的那么有效。使用智能指针代替r值是恕我直言更好(我的意思是更快),它代码优雅和清晰。我对吗?