Hallo miteinander. Habe eine Frage, da mir noch der Weit- und Durchblick für C++, insbesondere für Zeiger und Refenzen im Umgang mit Objekten fehlt.
Man stelle sich eine einfache Klasse Person vor, welche nur ein privates Feld name vom Typ std::string hat. Trivial, gel?
Für den Namen gibt es nun den üblichen Getter und Setter. Die Klasse Person hat zudem einen Konstruktor um das Feld zu initialisieren, also Person::Person(std::string name) und einen leeren Konstruktor, der das Feld mit einem Leerstring initialisiert.
Dabei wünsche ich mir als Klassenentwickler natürlich
- einfache Handhabung für den Nutzer der Klasse
- das String-Objekt sollte mit dem entsprechenden Personen-Objekt zerstört werden
Die Frage:
Welchen Typ nehme ich für das lokale Feld name? Einfach string oder string* oder string& ? Bei meinen bisherigen Experimenten funktionierte nur die Zeigervariante. Die native Form (kein Zeiger, keine Referenz) machte Ärger bei der Initialisierung im leeren Konstruktor. Eventuell wurde das String-Objekt nach verlassen des Konstruktor-Scopes aufgelöst und meine Objektvariable zeigte in ungenutzten Speicher ... keine Ahnung. Bei einem Zeiger ist die Verwendung für den Anwender aber hackelig. Da wären mir Referenzen lieber.
Also: wie macht Ihr das? Ein C++-String als Objektvariable? Nativ, als Zeiger, als Referenz? Konvertieren Setter, Getter oder Konstruktoren den Typ (dereferenzieren, etc...)?
Danke für alle Hinweise, Warnungen, Erfahrungen und mir unbekannte „best practices“!
Lesezeichen