Salutations tous,Problème avec le retour QMap comme référence?
J'ai un extrait de code comme suit:
class AppCtx {
private:
QMap<QString,IRzPlugin*> pluginsMap;
public :
void addPlugin(IRzPlugin *plugin)
{
pluginsMap.insert(plugin->getPluginUID(),plugin);
}
QMap<QString,IRzPlugin*> & getPlugins()
{
return pluginsMap;
}
}
Dans mon code client j'accéder à la QMap comme follows.But les pauses d'application où il faut accéder au « plugins.size() '
class MainWindow
.
.
{
void registerPlugins(AppCtx *appctx)
{
QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();
qDebug("Num of plugins %d",plugins.size()); //Breaks here
QList<IRzPlugin*> listPlugins=plugins.values();
for(int i=0;i<listPlugins.size();i++)
{
}
}
debug info est donnée ci-dessous:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff057a16f0 (LWP 9069)]
0x0000000000406ba1 in QMap<QString, IRzPlugin*>::size (this=0x405c2b)
at /opt/qtsdk-2010.02/qt/include/QtCore/qmap.h:178
178 inline int size() const { return d->size; }
(gdb) back
#0 0x0000000000406ba1 in QMap<QString, IRzPlugin*>::size (this=0x405c2b)
at /opt/qtsdk-2010.02/qt/include/QtCore/qmap.h:178
#1 0x0000000000406736 in MainWindow::registerPlugins (this=0x7fff0d7c98f0)
at /work/svn-checkout/osaka3d/osaka3d/tags/iter07/prototype/osaka3d/rinzo/ui/mainwindow.cpp:23
}
des astuces?
Merci à l'avance, umanga
Si vous ne prévoyez pas de modifier la carte, il n'est pas non plus nécessaire de renvoyer une référence à la carte car Qt utilise un mécanisme de copie sur écriture pour la plupart des objets. Cela signifie que les données ne sont pas dupliquées si vous construisez une copie de QMap jusqu'à ce que vous changiez quelque chose. – humbagumba