Vector-übergabe in Klassenkonstruktor



  • Hallo Leute

    Ich erzeuge in meiner Hauptklasse einen Vektor der Objekte einer anderen Klasse enthält. Diesen Vektor übergeben ich im Konstruktor an eine Unterklasse, wo dieser Vektor eben lokal benötigt wird.

    class Test1
    {
    public:
       // CTOR, DTOR
    
    private:
       vector <Datenklasse*> data;
    
    }
    

    Der Vector wird irgendwo in Klasse "Test1" gefüllt mit ...
    push_back( new Datenklasse( ... ) ) usw.

    Nun wird irgendwo in Klasse "Test1" der Konstruktor einer Unterklasse "Test2" aufgerufen, die ebenfalls diesen Vektor benötigt weil dort Daten enthalten sind.

    class Test2
    {
    public:
       Test2( vector <Datenklasse*> data_temp );
    
    private:
       vector <Datenklasse*> data;
    
    }
    
    // Cpp-File der Klasse "Test2"
    
    Test2::Test2( vector <Datenklasse*> data_temp )
    {
       // Überführung data_temp -> data;
    
       // wie mach ich das am besten?
    
    }
    

    Nun frag ich mich gerade wie dieser Konstruktor auszusehen hat, der viele Objekte dieser Datenklasse verwalten soll.

    Irgendwie muss ich die Daten von data_temp (dem Übergabeparameter des Konstruktors) in die lokale Variable data des gleichen Typs überführen.

    Gibt es da irgendwelche Copy-Möglichkeiten?

    danke im vor_raus 🙂



  • Nutze die Kopiersemantik von C++.

    It0101 schrieb:

    Test2::Test2( vector <Datenklasse*> data_temp )
    : data( data_temp ) // entweder Copy-Construction in Initialisierungsliste
    {
        data = data_temp; // oder Kopie durch Zuweisung
    }
    

    BTW: Den Parameter des Konstruktors solltest Du besser als konstante Referenz angeben, da sonst zweimal kopiert wird.

    danke im vor_raus 🙂

    Empfehlung hierzu: Du_den 🙄



  • Ja ich wollte eigentlich auch sowas wie eine Referenz nehmen, denn beim KOpieren müsste ich doch dann im Destruktor beider Klassen mit delete wieder aufräumen oder?



  • Was mir trotzdem nicht klar ist, wieso das C++ Forum hier aus "vor-raus" (- wegdenken) immer Sterne macht: siehe "vorraus".

    ... mal ganz davon abgesehen dass du natürlich recht hast bzgl Duden ^^



  • Du kopierst ja nur einen Vector von Zeigern. Der Vector räumt sich selbst auf. Deine Zeiger zwar (natürlich) nicht, aber da Du den Ursprungsvector ja noch haben dürftest, und die Zeiger im Ursprungsvector auf dieselben Objekte wie die Zeiger im kopierten Vector zeigen, musst Du hier nichts löschen. Im Gegenteil, wenn Du die Zeiger in der Kopie löscht, bekommst Du später große Probleme, wenn Du versuchst auf die Zeiger im Ursprungsvector zuzugreifen.

    It0101 schrieb:

    Was mir trotzdem nicht klar ist, wieso das C++ Forum hier aus "vor-raus" (- wegdenken) immer Sterne macht: siehe "v******".

    Weil dieser Rechtschreibfehler nervt. Aber jetzt wo Du im Duden geschaut hast kannst Du es ja korrekt schreiben.



  • Dann macht das auch mal mit "seid - seit" und "wieder - wider" ... zu 50% wird das auch falsch gemacht 😉


  • Mod

    It0101 schrieb:

    Dann macht das auch mal mit "seid - seit" und "wieder - wider" ... zu 50% wird das auch falsch gemacht 😉

    Nur handelt sich bei allen 4 Varianten um richtige Wörter.



  • camper schrieb:

    It0101 schrieb:

    Dann macht das auch mal mit "seid - seit" und "wieder - wider" ... zu 50% wird das auch falsch gemacht 😉

    Nur handelt sich bei allen 4 Varianten um richtige Wörter.

    Ich denke mal er meint es so, das diese Wörter benutzt werden, jedoch die falsche Schreibeweise im falschen Context.


  • Administrator

    Firefighter schrieb:

    Ich denke mal er meint es so, das diese Wörter benutzt werden, jedoch die falsche Schreibeweise im falschen Context.

    Definitiv meint er es so, nur ist es wie Camper gesagt hat, die Wörter sind alle korrekt und einen Code zu schreiben, welcher den Context herausfindet, ist wohl etwas zu komplex 😉

    Aber es gibt ja noch andere Wörter, wie Standard, welches viele als Standart schreiben ... ehm also mit t anstatt d am Ende 😃

    Grüssli



  • Dravere schrieb:

    Aber es gibt ja noch andere Wörter, wie Standard, welches viele als stan**** schreiben ... ehm also mit t anstatt d am Ende 😃

    Aber auch das Wort gibt es.
    (für den Link - rausnehmen. 🙂 )
    http://www.k-faktor.com/stand-art/

    Zugegeben wird auch das eher selten gmeint. 😉


Anmelden zum Antworten