Lebensdauer von Zeigern in Methoden / Funktionen
-
314159265358979 schrieb:
mgaeckler schrieb:
Achtung: Nachdem der Speicher freigeben wurde, dürfen alle Zeiger, die darauf evt. noch verweisen nicht mehr verwendet werden, ehe ihnen nicht eine neue, gültige Adresse zugewiesen wurde.
Man darf sie nur nicht dereferenzieren.
Nein.
-
Nette Begründung. Ohne Zitat aus dem Standard geht hier mal grundsätzlich gar nichts, besonders bei dir.
-
314159265358979 schrieb:
Nette Begründung. Ohne Zitat aus dem Standard geht hier mal grundsätzlich gar nichts, besonders bei dir.
Genau. Also wo ist deine Begründung?
-
Ich muss hier gar nichts begründen.
-
Vor den restlichen Flames bitte "verwenden" definieren. :xmas1:
-
cooky451 schrieb:
Vor den restlichen Flames bitte "verwenden" definieren. :xmas1:
Das hat doch schon 314159265358979 für mich getan. Bevor hier weiter wegen nix gestitten wird, sollte die ganze Diskussion gelesen werden. Das ist hier doch kein Kindergarten.
mfg Martin
-
3.7.3.2§4 (C++98) gibt camper recht.
edit: Davon abgesehen müssen natürlich weder camper noch pi irgendwas begründen, allerdings aus stark unterschiedlichen Gründen.
-
Wow. Ich dachte, dass es in technischen Foren anders zugeht.
Zu meinem Beispiel: Ich erstelle aus einer Datei pro Zeile eine Instanz, auf die ich in einem Vektor Zeiger speichere. Ich wüsste nicht, wie ich das anders machen sollte.
class Team { public: [...] void initTeam(Team*, char*); void addPlayer(Player*); [...] private: [...] vector<Player*> players; }; [...] void Team::initTeam(Team* team, char* filename) { ifstream input(filename); // Open for reading string text; while(getline(input, text)) { int size = text.length(); [...] text parsen Player *addAPlayer = new Player(charname, pass, tackle, schuss); team->addPlayer(addAPlayer);
-
Kannst du "Player" denn aus irgendeinem Grund weder kopieren noch moven? Nutzt du Polymorphie? Ansonsten:
std::vector<Player> players; Player my_new_player(...); players.push_back(my_new_player); // Alternativ auch mit std::move, aber das ist wahrscheinlich erst mal egal für dich.kauflummi schrieb:
Wow. Ich dachte, dass es in technischen Foren anders zugeht.
Das sind die Allerschlimmsten. :xmas1:
PS:
C-Strings übergibt man als "const char*", damit garantiert man, dass der String nicht geändert wird. Ansonsten ist es in C++ schöner einen "const std::string&" zu verwenden, wenn man keinen besonderen Grund für C-Strings hat.Eine Methode "init" lässt schon schlechtes Design vermuten. Warum kannst du das, was du da machst, nicht im Konstruktor erledigen?
-
Danke für die Tipps, habe mal zwei Semester C++ gehört aber nicht mitgearbeitet. Du bringst wahrscheinlich die ganzen Sachen zur Sprache die ich damals nicht verstanden habe, jetzt aber für die offene Hausarbeit brauche.