AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[c++] Durch Objektliste iterieren

Ein Thema von Luckie · begonnen am 12. Sep 2008 · letzter Beitrag vom 16. Sep 2008
 
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#6

Re: [c++] Durch Objektliste interieren

  Alt 13. Sep 2008, 18:56
Zitat von Luckie:
[c++] Durch Objektliste interieren
Zitat von Luckie:
Jetzt will ich durch die Liste iteriren:
Bei der Schreibweise von "iterieren" scheinst du dir ja nicht allzu sicher gewesen zu sein


Daß du überhaupt eine Fehlermeldung bekommst, liegt wohl daran, daß das Iterator-Debugging aktiviert ist.
Wie Roachford erklärte, gibt GetKonten() eine Kopie deines Listenobjektes zurück; du möchtest wohl eher, wie in Delphi üblich, eine Referenz zurückgeben.
Code:
class CKunde

public:
...
   const list <CKonto>& GetKonten ()
   { return _konten; }
Allerdings solltest du dir bewußt sein, daß du damit ein Implementationsdetail ins Interface verschiebst; wenn du dich später für einen vector oder einen nicht in der STL enthaltenen Container entscheidest, mußt du das Interface ändern.

Noch drei weitere Anmerkungen:
  • "using namespace"-Deklarationen haben in Headerdateien nichts zu suchen.
  • In C++ ist es unüblich, Zeiger auf Objekte zu übergeben. Das liegt einerseits daran, daß ein Zeigerparameter gewöhnlich impliziert, daß man auch 0 übergeben könne, und damit wird - und sollte - deine AddKonto()-Funktion sicherlich nicht rechnen. Zudem sind bei Objektzeigern die Besitzverhältnisse unklar: soll AddKonto() eine Kopie des übergebenen Objektes erstellen, oder soll es das Objekt selbst in Besitz nehmen und bei Bedarf freigeben? Dies würde wiederum erfordern, daß das Objekt mit new angelegt würde, und dann hast du beim Übergeben als Zeiger ein potentielles Speicherleck (falls eine Exception auftritt).
    Typischerweise würde AddKonto() eine konstante Referenz übernehmen:
    Code:
    void AddKonto (const CKonto& konto);
    Das ist effizienter als eine Kopie des Objektes, und zudem ermöglicht es, daß der Parameter on-the-fly als temporäres Objekt konstruiert wird:
    Code:
    AddKonto (CKonto (<hier die Parameter für den Konstruktor von CKonto angeben>));
    Wenn du aber ein Äquivalent zu der Objektreferenz von Delphi möchtest, beispielsweise, weil CKonto nicht über eine Kopiersemantik verfügt, dann solltest du eher einen referenzzählenden Smart-Pointer übergeben.
  • Für C++-spezifische Fragen kann ich dir http://www.c-plusplus.de/forum/ empfehlen. Du kennst das Forum ja
Moritz
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz