我有一个 View 和一个 Shape 类,其中 View “拥有”它的 Shape 对象。我将其实现为 unique_ptr 的向量。在函数 View::add_shape(std::unique_ptr&& shape) 中,我仍然需要在右值参数上使用 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));
}