Собственно вопрос вкусовщины: кто как хранит QObject-based объекты?
Варианты:
Сырые указатели:
// .h
class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = nullptr);
private:
MyOtherObject * const m_d;
}
// .cpp
MyObject::MyObject(QObject *parent)
: QObject(parent),
m_d(new MyOtherObject(this))
{
connect(m_d, ...);
}
Умные указатели:
// .h
class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = nullptr);
private:
// или QScopedPointer
const std::unique_ptr<MyOtherObject> m_d;
}
// .cpp
MyObject::MyObject(QObject *parent)
: QObject(parent),
m_d(std::make_unique<MyOtherObject>())
{
// лишний get()...
connect(m_d.get(), ...);
}
Собственно разница минимальная. Разве что в первом случае можно забыть this. А во втором нужно писать лишний get().
QObject заточен под сырые указатели и с этим ничего не поделать.
Возможно у кого-то есть самописный connect11(), который умеет работать с unique/shared_ptr.