A couple of years ago, I made a blog post, KDE makes Qt, with data about which percentage of Qt contributions came from people starting in KDE. Basically, how many Qt contributions are made by people who used KDE as a gateway drug into it. I have now updated the graphs with data until the end of September 2017: Many of these changes are made by people not directly as a result of their KDE work, but as a result of their paid work. But this doesn t change the fact that KDE is an important project for attracting contributors to Qt, and a very good place to find experienced Qt developers.
m_foo = std::make_shared<SomeQObject>(); /* plenty of lines and function boundaries left out */ (void)connect(m_foo.get(), &SomeQObject::someSignal, [m_foo]() /* */ );The connection gets removed when the pointer inside m_foo gets de-allocated by the shared_ptr.
But the connection target is a lambda that has captured a copy of the shared_ptr There is at least a couple of solutions.
- Keep the connection object (QMetaObject::Connection) around and call disconnect in your destructor. That way the connection gets removed and the lamda object should get removed
- Capture the shared pointer by (const) reference. Capture the shared pointer as a weak pointer. Or as a raw pointer. All of this is safe because whenever the shared pointer gets a refcount of zero, the connection gets taken down with the object.