Segmentation fault при вызове функции из оболочки function

Всем доброго времени суток. Пытаюсь написать callback механизм (стандарт С++11). На данный момент столкнулся с проблемой сохранения метода с параметрами в оболочку std::function, точнее проблема в том, что она сохраняется, но при вызове в .cpp падает. Смотрел по дебагу, там затирается pointer на метод, но при этом ссылка на объект, которому принадлежит метод, и его аргументы живы.

Еще интересный факт, если вызвать сразу же после std::bind "контейнер" с методом, то все работает как надо.

public:
    template <class Function, class... Args>
    void callback(Function &&f, Args&&... args)
    {
        m_callback = std::bind(std::forward<Function>(f), std::forward<Args>(args)...);
//        m_callback(); // Если вызвать, то все окей, если вызвать это в .cpp, то валится
    }

Ответы (1 шт):

Автор решения: Евгений Якушов

Проблема заключалась в невнимательности... В файле qiBase.cpp я подписался на сигнал watcher'a finished и в лямбде вызывал сигнал Cpromise::finished, который вызывал удаление объекта из чего следовало, что дальнейший вызов callback приводил к чтению из удаленного объекта.

// Connect в объекте promise
connect(m_pWatcher, &QFutureWatcher<bool>::finished, this, [=] {
//  emit finished(); // Приводило к удалению объекта, который хранит callback
    call_callback(); // поэтому сначала отработать callback, затем emit
    emit finished();
});

...

// Connect в таскере с картой задач типа CPromise
connect(promise, &CPromise::finished, this, [=] {
    m_mapTasks.remove(promise);
    delete promise;
});
→ Ссылка