我有一個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是的,謝謝你指出。現在已經修復,還有一些錯別字。 :) –