std :: bind不使用move构造函数

时间:2018-09-25 20:08:03

标签: c++ c++11

我有一个MyClass类,它具有复制和移动构造函数。我尝试通过一个队列和一个仿函数将MyClass对象从一个线程发送到另一个线程。对于此任务,我以以下方式使用std :: bind:

someQueue.push( std::bind(
   [ this ]( MyClass & object ) { this->m_ObjectMember.addObject( object ); },
   std::move( localObject ) ) );

class MyClass
{
   public:
   MyClass( MyClass const& other );  <--- always called
   MyClass( MyClass && other );  <--- never called
   <...>
}

我现在的问题是,每次将所说的std :: bind称为MyClass对象(通过std :: move(localObject)移交)至少复制了两次,我可以从复制构造函数调用中看到这一点。调用来自MyClass返回的函子内部MyClass对象实例的构造,但是,由于我通过std :: move移交了该对象,并且该类具有move构造函数,因此我希望它使用move构造函数并保留单独使用复制构造函数。但是最后只调用复制构造函数。

有人可以告诉我为什么以及如何保存至少一份副本吗?

0 个答案:

没有答案