6

我想为某种类型实现移动构造函数(无复制构造函数),该类型需要是boost::unordered_map. 我们称这种类型Composite

Composite具有以下签名:

struct Base
{
  Base(..stuff, no default ctor) : initialization list {}
  Base(Base&& other) : initialization list {} 
}

struct Composite
{
  Base member;
  Composite(..stuff, no default ctor) : member(...) {}
  Composite(Composite&& other) : member(other.member) {} // <---- I want to make sure this invokes the move ctor of Base
}

我想写这个所以boost::unordered_map< Key , Composite >不需要复制构造函数,只使用移动构造函数。如果可能的话,我不想Base在移动构造函数的初始化列表中使用复制构造函数Composite

这可能吗?

4

1 回答 1

14

member(std::move(other.member))

作为黄金法则,无论何时通过右值引用获取某些内容,都需要在内部使用它std::move,而每当您通过通用引用获取某些内容(即使用 推导模板类型&&)时,您需要在内部使用它std::forward

于 2012-12-10T00:21:17.870 回答