kann ich ein vector zurück geben?
-
Ein Smart Pointer wäre wohl angebrachter.
hä??
-
#include<memory> #include<vector> using namespace std; auto_ptr<vector<meintyp> > funktion() { vector<meintyp> *v = new vector<meintyp>; // füllen von v; return auto_ptr<vector<meintyp> >(v); } int main() { auto_ptr<vector<meintyp> > vecptr = funktion(); // mit vecptr arbeiten }
Achten Sie
auch besonders auf das nirgends vorhandene delete ... auto_ptr übernimmt die Verantwortung für sein Objekt und löscht es, wenn er selbst zerstört wird. Ich hab das aber nur mal so gepostet, und würde es niemandem empfehlen, gedankenlos auto_ptr einzusetzen. Der tut nämlich nicht automatisch das richtige, man muss erst das zugrundeliegende Prinzip der Besitzübertragung verstanden haben.
-
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=auto_ptr#Answ
@ChrisM
Ich sag nur "named return value optimization"
-
Hi,
auf named return value optimization würd ich mich aber nicht verlassen. Es gibt viele Fälle, in denen der Compiler es nicht anwenden darf.
ChrisM
-
ja leute aber mein problem ist immer noch nicht gelöst,
soll ich jetzt diesen auto_ptr anwenden?
WIe könnte ich das ohne auto_ptr realisieren? hat jemand ein idee???
Übrigens bashar, weißt du was dein nick bedeutet?
-
Bible basher [sl.] christlicher Fundamentalist
-
susi21: Konkret ja. Das Wort mag in anderen Kontexten als dem, von dem ich es habe, mir unbekannte Bedeutungen haben (@christlicher: Lern Lesen. e != a)
Das einfachste wäre es, den Vektor nicht zurückzugeben, sondern ihn als Referenzparameter der Funktion zu übergeben:
void funktion(vector<meintyp>& v) { // mit v arbeiten }
BTW ist das dann das gleiche, wie NRVO intern vom Compiler gehandhabt wird.
-
Danke leute hat funktioniert.
Bashar in Mittelasien heißt bashar = lebewesen. nur zur info
-
Wo ist Mittelasien? Kirgisistan?
-
Ich finde std::auto_ptr hier extrem passend. Nur weil das Verhalten für Leute, die ihn nicht kennen, seltsam ist, heißt es nicht, das man ihn meiden sollte.
Und hier ist einer der Fälle, in denen ich glaube ich vielleicht doch ne Referenz auf ein mit new angelegtes Objekt verwenden würde, statt eins Zeigers, da er keine Vorteile bringt. Ich habs mal ausprobiert. Ich finde ein Punkt sieht einfach schöner aus, als ein Pfeil.
auto_ptr<vector<meintyp> > funktion() { vector<meintyp> & v = *new vector<meintyp>; // füllen von v; return auto_ptr<vector<meintyp> >(&v); }
-
Ich würd einfach gucken, ob mein Compiler NRVO kann, und mich dann darauf verlassen. Das ist letztlich eine QoI issue, wenns ein Compiler mal nicht unterstützt, hat man halt Pech gehabt ... die Semantik ändert sich (hoffentlich!) nicht, nur die Performance.