QPointer to QHash
Можно ли использовать QPointer с QHash?
QPointer<QHash<QString, QPointer<QStringList>> > pHash;
1 ответ
QPointer может использоваться только с подклассами QObject. Таким образом, его нельзя использовать с QHash или QStringList, так как оба они не являются объектами QObject. Если приведенный выше код компилируется для вас, возможно, это потому, что вы еще не используете pHash? Даже инициализация такого QPointer, например,
QPointer<QHash<QString, QString> > foo( new QHash<QString, QString>() );
выдает ошибки, подобные следующей (gcc):
error: cannot convert ‘QHash<QString, QString>*’ to ‘QObject*’ in initialization
Если вам действительно нужны (умные) указатели на контейнеры, попробуйте QSharedPointer, который не требует, чтобы содержащийся объект имел какой-либо определенный тип. Обычно каждый создает контейнеры в стеке, хотя их создание в куче является однотипным и не требуется почти во всех случаях. Контейнеры Qt являются неявно общими, поэтому их копирование обходится дешево.