Objekt als Parameter einer Methode / STL-Vektor: push_back eines Objekts



  • Hallo

    Ich habe ein Problem in VC 2008.

    Ich habe eine Methode und einer der Parameter davon ist ein Objekt. Dieses Objekt seinerseits hat Vektoren (STL), die Objekte beinhalten.

    Frage:
    Wenn ich einer Methode ein Objekt übergebe wir dja davon eine Kopie erstellt. Wird auch eine Kopie der Vektoren (Membervariable) erstellt?
    Wird dabei der operator = aufgerufen?
    Oder ein Defaultkonstruktor mit einem Objekt als Parameter?

    Weitere Frage:
    Wenn ich einem STL-Vektor ein Element mit push_back zuweise, wird dann davon ein neues Objekt erstellt?
    Wie ist es, wenn dieses Element ebenfalls ein Objekt ist? Wird dieses kopiert und wenn ja, wird der operator = aufgerufen oder ein Default-Konstruktor? Oder wie geht das genau?

    Danke für die Hilfe.

    Hans



  • Probiers doch aus, indem Du den Copy Ctor und den Assignment Op. implementierst und dort einen Breakpoint machst (od. eine Debug Ausgabe).



  • Zur ersten Frage:
    Es wäre schön wenn du dein Problem mit Code untermauern würdest, dann könnte man eben kommentieren.

    Zur zweiten Frage:
    Wovon ein zweites Objekt? Der Zeiger wird einfach nur um ein T erweitert. Nein, das Objekt wird nicht kopiert, da std::vector<T>::push_back(const T& x) der Parameter eine Referenz auf T ist. Und was genau sollte der def-ctor damit zu tun haben? Ich kann nirgendswo einen sehen.


  • Mod

    Vector erzeugt bei push_back ein neues Objekt, welches mittels des Kopierkonstruktors initialisiert wird.



  • hstoessel schrieb:

    Frage:
    Wenn ich einer Methode ein Objekt übergebe wir dja davon eine Kopie erstellt. Wird auch eine Kopie der Vektoren (Membervariable) erstellt?

    Ja.

    hstoessel schrieb:

    Wird dabei der operator = aufgerufen?
    Oder ein Defaultkonstruktor mit einem Objekt als Parameter?

    Das wird wohl Implementierungsabhängig sein, wobei ich vom Kopierkonstruktor ausgehe. Ein Objekt, das in einem vector abgelegt werden, muss sowohl einen Zuweisungsoperator als auch Kopierkonstruktor besitzen.

    Aber fernab der Frage: Ist eine Kopie wirklich nötig? Oder reicht eine konstante Referenz bei der Übergabe (womit Kopien hinfällig werden).

    Ich verwende bei der Übergabe von Objekten (im Sinne von Instanz einer Klasse/Struktur) grundsätzlich konstante Referenzen, sofern nichts anderes nötig ist.


Anmelden zum Antworten