【发布时间】:2014-06-29 13:27:29
【问题描述】:
我有一个用户定义的类(树结构),实现了移动语义和一个swap 函数。我想以正确的方式实现 move 函数,作为标准 std::move 实现。
在树节点类中,每个子节点都有一个parent指针,指向父节点。这意味着对于移动操作,所有子节点都必须重新设置父节点(并且可能有很多子节点)
这意味着使用swap 进行移动不是最佳选择,因为两个列表的子级在交换后必须重新设置父级。所以我想实现一个move 函数来清除移动的树。
std::move 实现的声明有些复杂,它们使用std::remove_reference<T>::type&& 返回类型。我需要这个吗?
【问题讨论】:
-
这个很不清楚。单参数
std::move只是一个演员表,你不需要实现任何东西。无论如何,内部swap通常都适用于左值引用。 -
remove_reference很简单。见en.cppreference.com/w/cpp/types/remove_reference -
如果你的编译器支持
decltype(auto)(一个C++14特性AFAIK),你可以稍微简化一下定义(见this talk by Scott Meyers大约6.5分钟)
标签: c++ c++11 move move-semantics