我正在使用 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 ) );
这里 add_observer 定义为:
void add_observer( Observer observer ){ ... }
观察者定义为:
typedef std::function< void ( CharacterEvent, const Character& ) > Observer;
问题是编译器告诉我有人试图复制我在绑定(bind)中使用 *this
提供的场景,认为它会保留对它的引用,而不是尝试复制当我复制绑定(bind)生成的仿函数时。
- 为什么要复制我的对象?正常吗?
- 在提供对象的成员函数时应该如何避免复制?
最佳答案
- 这是默认行为。
- 要通过引用传递,请尝试使用 std::ref 。
关于c++ - 为什么 std::bind() 试图复制我的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850360/