【问题标题】:Non moveable std::array不可移动的 std::array
【发布时间】:2016-04-07 11:24:48
【问题描述】:

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

我想要一个生成邻域的函数 (对于Neighbour 类的对象,它是std::unique_ptrstd::array)。

很遗憾,我无法移动唯一指针的 std::array(我可以移动 std::unique_ptr<Neighbour>)。

我检查了std::unique_ptr<Neighbour> 必须是可移动的 - 确实如此。

#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);
}

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

你知道我该如何解决吗?

错误是:

1>------Build started : Project : Project5, Configuration : Debug Win32------
  1>  Source.cpp
  1>c:\users\radek\documents\visual studio 2013\projects\project5\project5\source.cpp(29) : error C2280 : 'std::unique_ptr<Neighbour,std::default_delete<_Ty>> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function
  1>          with
  1>[
    1>              _Ty = Neighbour
      1>]
      1>          c:\program files(x86)\microsoft visual studio 12.0\vc\include\memory(1487) : see declaration of 'std::unique_ptr<Neighbour,std::default_delete<_Ty>>::operator ='
      1>          with
      1>[
        1>              _Ty = Neighbour
          1>]
          1>          This diagnostic occurred in the compiler generated function 'std::array<std::unique_ptr<Neighbour,std::default_delete<_Ty>>,12> &std::array<std::unique_ptr<_Ty,std::default_delete<_Ty>>,12>::operator =(const std::array<std::unique_ptr<_Ty,std::default_delete<_Ty>>,12> &)'
          1>          with
          1>[
            1>              _Ty = Neighbour
              1>]
              == == == == == Build: 0 succeeded, 1 failed, 0 up - to - date, 0 skipped == == == == ==

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 不幸的是它仍然不起作用。同样的错误。
    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 2022-01-13
    • 1970-01-01
    • 2014-04-06
    • 2013-08-08
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    相关资源
    最近更新 更多