Редактировать: Этот ответ был в ответ на исходный вопрос, который не использовал QObject
, но имел class A
как автономный класс, наследующий ничего. Вопрос был позже отредактирован, сделав этот ответ устаревшим, но я оставлю его здесь, чтобы показать, что потребуется, если не использовать QObject
.
Единственный способ, которым вы можете это сделать, - сохранить объект до тех пор, пока таймер не выстрелил. Например:
class A : enable_shared_from_this<A> {
void fun() {
QTimer::singleShot(10, bind(&A::timerSlot, shared_from_this()));
}
public:
void timerSlot();
}
auto a = SharedPointer<A>(new A);
a->fun();
a->reset(); // a goes out of scope, but its referent is kept alive by the `QTimer`.
Причина вышеуказанные работы является то, что вы захватить shared_ptr к class A
при настройке таймера, и таймер будет держать на него (иначе он не может стрелять).
Если вам не нравится или не могут использовать последние C++ функции или увеличения:
struct Functor {
Functor(SharedPointer<A> a) : _a(a) {}
void operator() { a->timerSlot(); }
SharedPointer _a;
};
class A {
void fun(shared_ptr<A> self) {
QTimer::singleShot(10, Functor(self));
}
public:
void timerSlot();
}
auto a = SharedPointer<A>(new A);
a->fun(a);
Пожалуйста, удалите «грубый код» и добавьте * точный * код там. В тестовой папке дьявол находится в деталях ... – peppe