Recentemente tive problemas com mem_fun e shared_ptr em um loop for_each
Os elementos
typedef shared_ptr<task> task_ptr;
typedef deque<task_ptr , pool_allocator<task_ptr> > deque_task_ptr;
Agora a combinação explosiva
for_each(_task_pool.begin(), _task_pool.end(),
std::mem_fun(&task::do_task));
O problema está em usar std::mem_fun, ela não suporta chamar métodos de uma classe que estão em um shared_ptr, eu poderia ter usado bind, mais preferi manter o código, como a boost tem sua própria implementação de mem_fn ficando assim:
for_each(_task_pool.begin(), _task_pool.end(),
boost::mem_fn(&task::do_task));
Resolvido, obrigado Alex por reportar o problema.
Discussão preservada
4 comentários
A página histórica registra 4 comentários, mas o conteúdo deles não foi recuperado.