数组的正确值是否会提高性能?

时间:2016-06-13 17:30:44

标签: c++ rvalue-reference

例如,我有

class A
{
    std::array<Object, 5> m_objects;

    A(std::array<Object, 5> objects)
       : m_objects(std::move(objects)) //does using right value will improve 
                                       // performance in some cases??
    {}
};

在构造函数中使用正确的值会在某些情况下提高性能吗?

1 个答案:

答案 0 :(得分:1)

您还应该添加另一个构造函数来接受临时数组。

class A
{
    std::array<Object, 5> m_objects;

    A(std::array<Object, 5> objects)
       : m_objects(std::move(objects)) 
    {}
    A(std::array<Object, 5>&& robj): m_objects(std::move(robj))
    {}
};

你也可以使用forwarding reference T&&,但为了清楚起见,我把它留在了这里。这更明确。

另请注意,在这种情况下使用move并不总能保证性能。对于array移动暗示,移动array所持有的元素。在这种情况下,Object类实例。

为了更好地执行此操作,您应该提供move constructorObject类,否则此处的移动操作将只是个别Object实例的副本。

注意:Object的移动构造函数应该比复制构造函数便宜。否则,移动和复制性能之间没有区别。