我有一个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构造函数并保留单独使用复制构造函数。但是最后只调用复制构造函数。
有人可以告诉我为什么以及如何保存至少一份副本吗?