为什么std::queue要求元素是可复制的

  • 本文关键字:元素 可复制 queue std c++
  • 更新时间 :
  • 英文 :


在下面的代码中,std::deque编译,但std::queue不编译:

class A
{
public:
explicit A(int a) : m_a(a)
{
++count;
}
~A()
{
--count;
}
A(A const &) = delete;
A(A && other) : A(other.m_a)
{
other.m_moved = true;
}
A & operator = (const A &) = delete;
A & operator = (A && other)
{
m_a = other.m_a;
other.m_moved = true;
return *this;
}
bool operator == (const A & other) const
{
return m_a == other.m_a;
}
bool operator != (const A & other) const
{
return !operator==(other);
}
bool operator < (const A & other) const
{
return m_a < other.m_a;
}
static int count;
private:

bool m_moved = false;
int m_a;
};
int A::count = 0;
int main()
{
std::deque<A> d;
std::queue q(d);
q.push(A(1));
return 0;
}

但如果我通过用CCD_ 5更改CCD_ 4来使类CCD_。

这背后的逻辑是什么?据我所见,std::deque是一个不添加一些额外功能的适配器。

当您从deque构造队列时,元素会被复制,但您已经删除了deque值类型(A(的复制构造函数。所以在构造队列时需要移动d

...
int main()
{
std::deque<A> d;
std::queue q(std::move(d));  // added std::move
q.push(A(1));
return 0;
}

最新更新