copyconstructor baut misst
-
zeusosc schrieb:
weil sonst dass passiert:
copy constructor: 160261016026100Mag ja sein, ist trotzdem falsch.
Dein operator+ gibt übrigens eine Referenz auf eine lokale Variable zurück.
Warum plagst du dich eigentlich mit Arrays ab, und benutzt nicht std::vector?
-
weil geplant ist mehrere tausend klassen aufzurufen,..
und ::vector braucht dann ne menge speicherplatz,..
da habe ich halt gehofft das ein bool'sches array net so viel braucht,..gruuß
-
zeusosc schrieb:
weil geplant ist mehrere tausend klassen aufzurufen,..
und ::vector braucht dann ne menge speicherplatz,..Ein vector<bool> dürfte um ein vielfaches effizienter sein (zumindest was den Speicherverbrauch angeht) als dein Array-Gebastel. Mit dem Zusatznutzen, dass es funktioniert, und du weder Copykonstruktor noch Zuweisungsoperator oder Destruktor selbst zu schreiben brauchst.
zeusosc schrieb:
da habe ich halt gehofft das ein bool'sches array net so viel braucht,..
Du weißt aber, dass ein vector innen drin normalerweise auch nur ein Array ist, oder?
-
so weit ich weiß is std::vector ein container,...
gruuuß
-
ja, std::vector ist ein container, aber der verwendet in der regel intern einfach ein array, das mit new dynamisch erzeugt wird.
und ein array von bool[] verbraucht sogar *mit sicherheit* mehr speicher als ein vector<bool>, denn sizeof(bool) ist niemals weniger als ein byte und vector<bool> packt idR bools intern tatsächlich in einzelne bits.vector<bool> ist übrigens kein container.
-
ok,. danke für die info,..
ich verbleibe erstmal bei einem bool array[] und würde gerne wissen wo im copyconstructor der fehler liegt, bzw. das gerade beim ersten alles richtig läuft und beim zweiten aufruf ein paar bits verschluckt werden,....
gruuuß
-
zeusosc schrieb:
ich verbleibe erstmal bei einem bool array[] und würde gerne wissen wo im copyconstructor der fehler liegt, bzw. das gerade beim ersten alles richtig läuft und beim zweiten aufruf ein paar bits verschluckt werden,....
Wie ich schon sagte:
Das delete im Copykonstruktor ist falsch.
Der operator+ gibt eine Referenz auf eine lokale Variable zurück, die nach dem Aufruf nicht mehr existiert.Das erzeugt undefiniertes Verhalten. Damit ist es müßig, sich darüber Gedanken zu machen, was das Programm tut, weil es alles tun könnte.
-
ohhhhh man (eigene doooofheit),. super

ja,. funzt,.. danke leutz
-
Wie MFK schon sagte, es gibt nicht altes zu löschen.
Falls doch müsstest Du dann aber schon den delete[] nehmen.
-
Int_t *my_ints = new Int_t[10];
...
delete []my_ints;
This tells the delete operator to go and find the array size, and delete all the objects.
k,.. danke für den tipp
