不可移动的std :: array

时间:2016-01-03 20:19:36

标签: arrays c++11 visual-studio-2013 move-semantics

我正在Visual Studio 2013中实现禁忌搜索算法。

我想有一个生成邻域的功能 (对于std::array类的对象,它是std::unique_ptr的{​​{1}}。

不幸的是,我无法移动Neighbour个唯一指针(我可以移动std::array)。

我已经检查过std::unique_ptr<Neighbour>必须是可移动的 - 所以它是。

std::unique_ptr<Neighbour>

在Coliru上,它正在运作:http://coliru.stacked-crooked.com/a/6c52a6a7a148350a 我想在Visual Studio 2013中实现C ++ 11有些问题。

你知道我该怎么办呢?

错误是:

#include <iostream>
#include <memory>
#include <array>


class Neighbour {
public:
   virtual ~Neighbour(){};
};


class Neighbourhood
{
public:
  using Neighbours = std::array<std::unique_ptr<Neighbour>, 12>;

protected:
  Neighbours neighbourhood;
  unsigned size;
};


int main()
{
  Neighbourhood::Neighbours n1;
  Neighbourhood::Neighbours n2;

  n2 = std::move(n1);
}

1 个答案:

答案 0 :(得分:1)

VS2013不会自动生成移动构造函数。只需为您的类实现移动构造函数,它将按预期编译和运行。