C++ 为什么std::bind()尝试复制我的对象?

C++ 为什么std::bind()尝试复制我的对象?,c++,stl,C++,Stl,我正在使用VS2010。 在我的不可兼容场景类的构造函数中,我有: auto& character_mgr = CharacterManager::Instance(); character_mgr.initialize(); character_mgr.add_observer( std::bind( &Scene::on_character_event, *this, std::placeholders::_1, std::placeholders::_2 ) );

我正在使用VS2010。 在我的不可兼容场景类的构造函数中,我有:

auto& character_mgr = CharacterManager::Instance();
    character_mgr.initialize();
character_mgr.add_observer(  std::bind( &Scene::on_character_event, *this, std::placeholders::_1, std::placeholders::_2 ) );
此处添加观察员的定义如下:

void add_observer( Observer observer ){ ... }
typedef std::function< void ( CharacterEvent, const Character& ) > Observer;
观察员定义为:

void add_observer( Observer observer ){ ... }
typedef std::function< void ( CharacterEvent, const Character& ) > Observer;
typedef std::functionObserver;
问题是编译器告诉我有人试图复制我的场景,我在绑定中使用了
*this
,认为它会保留一个引用,而不是在复制绑定生成的函子时尝试复制它

  • 为什么它要复制我的对象?这正常吗
  • 在提供对象的成员函数时,如何避免复制
  • 这是默认的行为
  • 要通过引用传递,请尝试使用std::ref
  • 这是默认的行为
  • 要通过引用传递,请尝试使用std::ref

  • 为避免复制,请传递
    this
    ,而不是
    *this
    ,或者作为另一个答案,
    std::ref(*this)


    查看U.

    为避免复制,请传递
    ,而不是
    *此
    ,或者作为另一个答案,
    std::ref(*this)


    看看你的答案。

    谢谢,最完整的答案都是经过验证的,其他答案也很好。我现在明白这个问题了。谢谢,最完整的答案如此有效,其他答案也很好。我现在明白这个问题了。