QPointerをQHashで使用することは可能ですか?
QPointer<QHash<QString, QPointer<QStringList>> > pHash;
QPointerは、QObjectサブクラスでのみ使用できます。したがって、どちらもQObjectではないため、QHashまたはQStringListと一緒に使用することはできません。上記のコードがコンパイルされる場合、それはおそらくpHashをまだ使用していないためですか?そのようなQPointerを初期化することさえ、例えば
QPointer<QHash<QString, QString> > foo( new QHash<QString, QString>() );
次のようなエラーが発生します(gcc):
error: cannot convert ‘QHash<QString, QString>*’ to ‘QObject*’ in initialization
コンテナーへの(スマート)ポインターが本当に必要な場合は、QSharedPointerを試してください。これは、含まれているオブジェクトが特定のタイプである必要はありません。通常、スタック上にコンテナを作成しますが、ヒープ上にコンテナを作成することは一義的であり、ほとんどの場合不要です。Qtのコンテナは暗黙的に共有されるため、それらをコピーするのは安価です。