std:vector iterator problem?
-
folgendes:
Iterator enthält erstes objekt
std::vector<CModul*> test= m_pSysConf->GetGroup(strProcessName); std::vector<CModul*>::iterator itt= test.begin();Iterator zeig nach nirvana
std::vector<CModul*>::iterator itt= m_pSysConf->GetGroup(strProcessName).begin();Warum?
-
Vermutlich weil GetGroup eine Kopie zurückgibt. Die wird aber gleich wieder zerstört, damit ist der Iterator ungültig.
-
Wie ist denn GetGroup() defieniert? Wenn es eine Kopie zurückgibt, hast du ein Problem - die Kopie des lokalen vector<>s ist temporär und wird am Ende der Zuweisung wieder gelöscht.
-
ja gibt ne kopie zurück... schade:)
-
Warum änderst du die Funktion nicht, daß sie eine const-Referenz stattdessen zurückgibt? (ist sowieso vom Zeitaufwand günstiger)
-
class SysConf { std::vector<CModule*> const& get_group(std::wstring const&) const; }; // --- std::vector<CModul*> arr(m_pSysConf->get_group(strProcessName));
-
std::vector<CModule*> const& get_group(std::wstring const&) const{ std::vector<CModule*> tmp; for(... ) { tmp.pushback(...); } return tmp; }deswegen;)

-
OK, das ist ein Argument - könnte aber auch auf fehlerhaftes Design hindeuten

-
...dann übergib der Methode eine Referenz auf einen vector, welchen Du dann füllst.
-
gute idee... naja ich weis, aber es geht nich anders...
-
Es ginge auch
std::vector<CModule*> const& get_group(std::wstring const&) const { static std::vector<CModule*> tmp; tmp.clear(); for(... ) { tmp.pushback(...); } return tmp; }, wobei die Werte im vector natürlich nur bis zum nächsten Aufruf gültig sind

-
Badestrand schrieb:
wobei die Werte im vector natürlich nur bis zum nächsten Aufruf gültig sind

Threadsafe ists auch nicht

Wie wäre es denn mit Annahme der Kopie als lokale Variable und bilden eines Iterators auf die Kopie? Oder schlägt die Kopierphobie wieder durch?

-
ne ich werd morgen das desgin ändern...;) wenn ich fitter bin:) nach 6 stunden Proggen hacked man nur noch was rein das es funktioniert:)
-
lol, ja, 6 stunden, oh wie lange

-
jepp
8 stunden sind normal pflicht...:) naja bei parallen Projekten gehts noch:)