我有一个View和Shape类,其中View拥有它的Shape对象。 我正在实施这个作为unique_ptr的矢量。 在函数View :: add_shape(std :: unique_ptr & & shape)中,我仍然需要在rvalue参数上使用std :: move来编译它。为什么? (使用GCC 4.8)是作为左值函数传递的参数作为左值传递?
#include <memory>
#include <vector>
using namespace std;
class Shape { };
class View
{
vector<unique_ptr<Shape>> m_shapes;
public:
void add_shape(unique_ptr<Shape>&& shape)
{
m_shapes.push_back(std::move(shape));// won't compile without the std::move
}
};
int main()
{
unique_ptr<Shape> ups(new Shape);
View v;
v.add_shape(std::move(ups));
}
谢谢。这回答了这个问题。虽然我认为我会使用MM的建议传递值 – user1057165
“它的行为就像一个const函数中的左值引用”它不应该表现得像一个**非const **左值,以便它可以从? – neuront
@neuront是的,谢谢你指出。现在已经修复,还有一些错别字。 :) –