S
porter schrieb:
...
class Object{
public:
string name;
...
Also dann ist das Problem nicht das von mir vermutete.
porter schrieb:
...
...
Die Vermutung mit der fehlerhaften Zeigerbehandlung hatte ich auch schon, allerdings laeuft es ja unter Linux wie gesagt ohne Probleme und das Objekt existiert auch....
Dass das Programm unter bestimmten Umständen das Erwartete macht, ist leider bei C++ kein ausreichender Beleg dafür, dass es "korrekt" ist ... auch nicht bzgl. der Existenz eines Objekts. Gerade mit "ungültigen Zugriffen" kann man eine Menge "Spaß" mit scheinbar funktionierenden Programmen haben.
An Deinem Code sieht erstmal nichts falsch aus. Aber mich überascht eigentlich die Verwendung von Zeigern in dem Beispiel. Erwartet hätte ich es eher "anders herum":
- entweder alles mit "Autoobjekten" (also ohne new)
- oder die Ablage im Vektor per Zeiger (damit man Polymorphie nutzen kann).
Aber die dynamsiche Erzeugung(new), Übergabe per Zeiger und dann Ablage "by value" empfinde ich als unüblich.
Kann natürlich rotzdem richtig und notwendig sein im konkreten Fall, birgt aber gewisse Klippen, die es zu umschiffen gilt. z.B.:
- Im vector kann "slicing" auftreten, wenn man Polymorphie einsetzt (man hat ein "Derived" erzeugt, legt aber nur den "Base"-Teil ab),
- wo immer ein "new" steht, lauern memory leaks, double deletes, Zugriffe auf ungültige Objekte, ....
- ...
Gruß,
Simon2.