【发布时间】:2016-06-04 16:59:41
【问题描述】:
template <typename InfoType>
class ObjPool {
public:
struct tag;
using size_type = unsigned;
using uid_type = IntWrapper<tag, size_type>;
uid_type add(InfoType&& newInfo) {
if (removedUids_.size()) {
uid_type reuse = removedUids_.back();
removedUids_.pop_back();
infos_[reuse] = newInfo; // This line
alive_[reuse] = true;
++size_;
return reuse;
}
else {
infos_.push_back(newInfo);
alive_.push_back(true);
++size_;
return uid_type(size_-1);
}
}
// Other code
};
编译器产生错误:
无法分配“Graph::NodeInfo”类型的对象,因为它的复制赋值运算符被隐式删除 infos_[reuse] = newInfo;
我不太明白为什么?我定义了一个移动分配,并希望这一行调用移动版本而不是复制版本。
为什么
infos_[reuse] = std::move(newInfo);
这里有必要吗?
用c++11用clang编译。
【问题讨论】:
-
如果有名字,就是左值。