C++ Dekonstruktor
Verfasst: 18.02.2013, 16:50
Hallo Leute hab hier kleines C++ Programm. Hab hier aber ein kleines Dekonstruktor Problem...
Ich hab ein Array, welches auf die Instanzen von meiner Klasse zeigt. Aber leider es einmal doppelt auf eine Instanz. Wenn ich die zerstöre, dann haut es ihn natürlich auf wenn ich es nochmal machen möchte...
freund[5] und freund[3] zeigen beide auf luisa
Irgendwer eine Idee?
Hier mal das Programm.
Ich hab ein Array, welches auf die Instanzen von meiner Klasse zeigt. Aber leider es einmal doppelt auf eine Instanz. Wenn ich die zerstöre, dann haut es ihn natürlich auf wenn ich es nochmal machen möchte...
freund[5] und freund[3] zeigen beide auf luisa
Irgendwer eine Idee?
Hier mal das Programm.
Code: Alles auswählen
#include <iostream>
using namespace std;
int strlen1(const char *str) { // liefert die Laenge von str
if (str==0) return 0;
int i=0;
for (; str[i]; ++i);
return i;
}
void strcpy1(const char *src, char *dest) { // kopiert Inhalt von src nach dest
if (src==0 || dest==0) return;
int i=0;
for (; src[i]; ++i) dest[i]=src[i];
dest[i]='\0';
}
class Person {
char *name;
public:
Person(const char *str = "Susi") {
name = new char[strlen1(str)+1];
strcpy1(str,name);
}
Person(const Person &p) {
name = new char[strlen1(p.name)+1];
strcpy1(p.name,name);
}
~Person() { if(name) delete name;}
void change() {
name[4]='e';
}
ostream &print(ostream &o) const {
o<<name;
return o;
}
};
int main() {
Person maria("Maria"), peter("Peter"), franz("Franz"), luisa("Luisa");
Person mary(maria);
Person luise;
Person p(luise);
Person *freunde = new Person[7];
freunde[0]=maria;
freunde[1]=peter;
freunde[2]=franz;
freunde[3]=luisa;
freunde[4]=mary;
freunde[5]=luise;
freunde[6]=p;
freunde[5]=luisa;
freunde[3].change();
freunde[4].change();
for (int i=0; i<7; ++i) {
freunde[i].print(cout);
cout<<endl;
}
for (int i=0; i<7; ++i)
freunde[i].~Person();
_getchar_nolock();
return 0;
}