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 являются неявно общими, поэтому их копирование обходится дешево.

Другие вопросы по тегам