list stl
-
bzw.
list<A>* test() { list<A> *l = new list<A>(); l->push_back(1); l->push_back(2); cout << l->front().i << endl; cout << l->back().i << endl; return l; }mit impliziter Konvertierung. Nettes Feature

-
Es würde z.Bsp. auch gehen indem du test eine Referenz auf deine List übergibst.
void test(list<A>& l) { l.push_back(A(1)); l.push_back(A(2)); cout << l.front().i << endl; cout << l.back().i << endl; } /* Main-Methode */ int _tmain(int argc, _TCHAR* argv[]) { list<A> l; test(l); cout << l.front().i << endl; cout << l.back().i << endl; pause(); return 0; }[edit]Pfeile wegeditiert
[edit]
-
Bitte keine Kopierphobien entwickeln

class A { public: int i; A(int j){i=j;} }; list<A> test() { list<A> l; l.push_back( A(1) ); l.push_back( A(2) ); cout << l.front().i << endl; cout << l.back().i << endl; return l; } /* Main-Methode */ int _tmain(int argc, _TCHAR* argv[]) { list<A> l = test(); cout << l.front().i << endl; cout << l.back().i << endl; pause(); return 0; }
-
Gastbenutzer schrieb:
...
...Aber wenn ich das richtig verstanden habe, ist die Liste futsch sobald ich aus der Methode zurückkehre (und nur einen Pointer zurückgebe). Also ist doch 'new' die einzige Alternative oder?...Nö,
ich würde solche "Erzeugerfunktionen" komplett meiden. Hat man nur Ärger mit.
Gruß,
Simon2.
-
Braunstein schrieb:
Es würde z.Bsp. auch gehen indem du test eine Referenz auf deine List übergibst....
Mach doch mal eben die versehentlich kopierten Pfeilchen weg...

Gruß,
Simon2.
-
Erledigt.

-
Simon2 schrieb:
ich würde solche "Erzeugerfunktionen" komplett meiden. Hat man nur Ärger mit.
factory method? in diesem fall wissen wir doch gar nicht genau, was der OP vorhat.
OP schrieb:
Aber wenn ich das richtig verstanden habe, ist die Liste futsch sobald ich aus der Methode zurückkehre (und nur einen Pointer zurückgebe). Also ist doch 'new' die einzige Alternative oder?
ja, die liste ist weg, wenn du sie einfach so aus der funktion zurückgibst (per value, s.o. LordJaxoms posting). aber eine kopie wird erzeugt (inklusive kopien der objekte, die in der liste sind), diese kannst du dann weiter verwenden.
moderne compiler sind außerdem so schlau, dass sie auf die kopie verzichten (und das meinte IMO auch LordJaxom mit "keine kopierphobie"). stichwort dazu: (named) return value optimization.
-
queer_boy schrieb:
Simon2 schrieb:
Aber wenn ich das richtig verstanden habe, ist die Liste futsch sobald ich aus der Methode zurückkehre (und nur einen Pointer zurückgebe). Also ist doch 'new' die einzige Alternative oder?
...
Das habe ich nicht gesagt !!

Braunstein schrieb:
Erledigt.

Danke !
Gruß,
Simon2.
-
Simon2 schrieb:
Das habe ich nicht gesagt !!

passiert heute wohl allen mal ^^.
aber interessanterweise habe ich auch dich zitiert und etwas dazugeschrieben, das nicht mehr da war... wie auch immer, ist korrigiert
-
Sehr schön
Danke für die Hinweise. Die Copy-Phobie trifft glaube ein wenig auf mich zu.