在递归数据结构中移动unique_ptr <T>的数组

Edw*_*own 4 c++ recursion move-semantics

尝试编译以下代码会导致以下编译错误:

错误C2280:'std :: unique_ptr> :: unique_ptr(const std :: unique_ptr <_Ty,std :: default_delete <_Ty >>&)':尝试引用已删除的函数

我的理解是数组'm_children'应该是可移动的,因为unique_ptr指向的类型定义了移动构造函数.

除非这是由类的递归性质或我忽略的移动语义的某些元素引起的错误?

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

class OctreeNode{
public:
    OctreeNode(){ };
    OctreeNode(OctreeNode&& other) : m_children(std::move(other.m_children)){};
private:
    std::array<std::unique_ptr<OctreeNode>, 8> m_children;
};

int main(int argc, char* argv[])
{
    OctreeNode T;
    std::cout << "Success!" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*ine 6

看起来在vs2013 std::array中,<array>标题中的定义不包括移动构造函数或移动赋值运算符.

在C++规则下,这些应该是自动生成的(因此不需要手动定义),但msvc在vs2015之前不包括隐式生成.