Frage zum shared_ptr aus der boost-libary
-
hi,
wenn ich einen vector von shared_ptr aus der boost-libary habe:std::vector<boost::shared_ptr<Klasse> > mVector;
und ich möchte jetzt einzelne Elemente vertauschen:
swap(boost::shared_ptr<Klasse> a, boost::shared_ptr<Klasse> b) { boost::shared_ptr<Klasse> tmp; tmp=a; a=b; b=tmp; }
funktioniert das dann mit folgendem Aufruf?
swap(mVector.at(x), mVector.at(y));
Muss ich da noch irgendetwas beachten oder irgendetwas anders machen?
Tschau Gartenzwerg
-
übergib die dinger doch mal referenz. sonst können die doch gar nicht geändert werden.
-
Warum schreibst du dir dein eigenes Swap? Wie sinnlos! Nimm std::swap!
-
hi,
std::swap macht doch nichts anderes oder?
Also, wenn ich daraus:void swap(boost::shared_ptr<Klasse>& a, boost::shared_ptr<Klasse>& b)
mache, sollte es ohne Probleme funktionieren?
Mir sind die boost::shared_ptr ein bisschen mystisch.
Tschau Gartenzwerg
-
hi,
aso, die Frage: funktioniert es mit std::swap denn auch ohne Probleme?Tschau Gartenzwerg
-
Ja klar. Die macht ja auch nichts anderes als dein swap (mit Referenzübergabe natürlich.) Ich kenn mich jetzt nicht soo genau mit boost::shared_ptr aus, aber es wär u.U. auch so möglich (dann wohl auch effizienter, es sei denn sie haben std::swap spezialisiert):
mVector.at(x).swap(mVector.at(y));
-
hi,
ich hatte nur Angst, dass es dann irgendwelche Speicherlecks o.ä. geben würde.
Na ok, danke @ all!Tschau Gartenzwerg
-
Bashar schrieb:
es sei denn sie haben std::swap spezialisiert
swap haben sie ( http://www.boost.org/libs/smart_ptr/shared_ptr.htm#functions )
tauscht den internen zeiger und den referenzenzähler aus.