La suppression de toutes les valeurs à partir d'une QMap
J'ai un QMap se composent de pointeurs sur des objets de la classe, affecté à l'aide new
. J'ai besoin de supprimer tous ces pointeurs. Quelle est la bonne façon de le faire avec QMap ? Je peux le faire de cette façon:
QList<ClassName*> allVals = map.values();
for (QList<ClassName*>::iterator it = allVals.begin(), endIt = allVals.end(); it != endIt; ++it) {
delete *it;
}
Mais est-il une meilleure façon de faire de même ?
OriginalL'auteur Littlebitter | 2013-04-06
Vous devez vous connecter pour publier un commentaire.
La meilleure façon de le faire est d'utiliser qDeleteAll(...):
qDeleteAll(...)
peut être utilisé sur tous de Qt sur les conteneurs. De cette façon, vous n'avez pas besoin de vous soucier d'une boucle ou de s'inquiéter de la suppression d'éléments individuellement.QMap<int, QString> list_items;
. Lorsque j'utiliseqDeleteAll(list_items)
puis j'ai eu un message d'erreur esterror: type 'const class QString' argument given to 'delete', expected pointer
. Avez-vous une idée dans ce cas?Vous pouvez utiliser qDeleteAll dans le cas où vous stocker des pointeurs dans votre carte. Vous avez ce message, car vous store en valeur, et puis d'essayer de le supprimer comme un pointeur. Jetez un oeil ici[lien]qt-project.org/doc/qt-4.8/qtalgorithms.html#qDeleteAll je pense que list_items.clear() serait assez dans votre cas.
est correcte. Vous avez seulement besoin d'utiliser
qDeleteAll(…)
lorsque la carte contient des pointeurs. Lorsqu'une carte est supprimé ou effacé les éléments au sein de il va perdre le champ & être détruits, mais les pointeurs seront laissés ballants et de vous présenter une fuite de mémoire, sauf si vous supprimez d'abord. Donc, la stratégie habituelle consiste à utiliserqDeleteAll(…)
avant de compensation ou de la suppression d'une carte, si la carte contient des pointeurs qui doit être supprimée. SinonqDeleteAll(…)
n'est pas nécessaire.Si vos clés sont également des pointeurs, sera
qDeleteAll
les supprimer?non, voir la documentation: “Uniquement les objets stockés dans chaque conteneur sera supprimé par cette fonction; les objets utilisés comme clés ne seront pas supprimés.”
OriginalL'auteur Cutterpillow