【发布时间】:2015-10-07 13:23:45
【问题描述】:
尝试编译以下代码会导致以下编译错误:
错误 C2280: 'std::unique_ptr>::unique_ptr(const std::unique_ptr<_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;
}
【问题讨论】:
-
在 clang 和 gcc 中编译。
-
您使用的是什么编译器以及哪些编译选项?
-
您可以将示例
main缩减为struct SomeStruct{}; std::array<std::unique_ptr<SomeStruct>, 1> foo, bar; foo = std::move(bar); -
@Nathan Oliver msvc,视觉工作室 2013。
-
我没有 VS 2013,但它可以在 VS2015 上编译。你有 CTP2 吗?
标签: c++ recursion move-semantics