Supposons que j'ai ce code ...C++ - quand les membres de classe non-pointers sont-ils détruits?
class GraphFactory : public QObject
{
private:
QMap<QString, IGraphCreator*> factory_;
public:
virtual ~GraphFactory();
};
GraphFactory::~GraphFactory()
{
// Free up the graph creators
QMap<QString, IGraphCreator*>::iterator itr;
for (itr = factory_.begin(); itr != factory_.end(); itr++)
{
IGraphCreator * creator = itr.value();
delete creator;
creator = NULL;
}
}
Quand est-ce le QMap factory_ détruit? Avant l'appel au destructeur, ou pendant le destructeur? (Je comprends que la destructor sera appelée lorsqu'une instance de GraphFactory est hors de portée Mais quand sont les membres non-pointeurs détruisais.?)
Edit: Je reçois des valeurs non valides pour la carte de factory_ lorsqu'il atteint le destructeur. Un point de rupture montre que la valeur n'aurait pas altéré la valeur stockée dans le QMap.
Vous devriez toujours pré-incrémenter les itérateurs: ++ itr. Cela n'a pas d'importance pour les entiers et les types d'itérateurs les plus simples, comme pour vector <>, mais cela peut être une sève de performance pour les itérateurs complexes, en raison de la différence de fonctionnement de ++. –