我对移动构造函数的性能有疑问,伪 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 值引用更快,因为它需要的复制操作要少得多,这很明显。然而,使用移动构造函数从函数返回对象仍然比将相同对象存储在智能指针中并返回智能指针更昂贵。
通过左值移动对象非常慢,通过智能指针移动它非常快,通过右值移动它在中间的某个地方。
我看不到 r 值的“力量”,因为它没有很多人说的那么有效。恕我直言,使用智能指针而不是 r 值更好(我的意思是更快),它的代码优雅而清晰。我对吗?