?
Nochmal für den nicht ganz so Weisen. Ich habe Kopier-Konstruktor und Zuweisungskonstruktor hinzugefügt, so wie ich es mir mal vorgestellt habe.
Das klappt immer noch nicht, aber ich weiß nicht an welcher Stelle mein Code genau crasht.
Ändert sich ein Vector, ruft er ja für jedes Element den Kopierkonstruktor auf.
In dem Kopierkonstruktor sollte mein meues Element ja dann die neue Adresse kennen, oder?
Atom::Atom()
{
// TODO Auto-generated constructor stub
}
Atom::Atom(const Atom& other)
{
std::cout << "KOPIERKTR" << std::endl;
x = other.x;
y = other.y;
z = other.z;
for (std::list<Atom*>::const_iterator iter = other.neighbours.begin();
iter != other.neighbours.end(); iter++)
{
connect(**iter);
}
}
Atom& Atom::operator=(const Atom& other)
{
if (this != &other)
{
x = other.x;
y = other.y;
z = other.z;
for (std::list<Atom*>::const_iterator iter = other.neighbours.begin();
iter != other.neighbours.end(); iter++)
{
connect(**iter);
}
}
return *this;
}
Atom::~Atom()
{
for (std::list<Atom*>::iterator iter = neighbours.begin();
iter != neighbours.end(); iter++)
{
disconnect(**iter);
}
}
Ich habe versucht mir das mal aufzumalen:
Atom A , Adresse 1
Atom B , Adresse 2
connect (A,B )=> A<2> , B<1>.
Nun kommt ein Kopiervorgang:
A´ = Kopie von A.
A´ , Adresse 3
durch Kopierkonstruktor A´<2> übernimmt die alte Adresse von B, B<1,3>
B hat nun das alte und neue A
A wird nun gelöscht:
B<3> hat nun nur noch Adresse von A´
B´ = Kopie(B)
B´ Adresse 4
B´<3> kennt Adresse von neuem A´
A´<2,4>
B wird gelöscht:
A´ hat nun nur noch B´ <4>
und alle sollten glücklich sein...
zumindest nach dem Märchen
Wäre nett , wenn mir jmd meinem Denkfehler aufzeigen kann.
Falls ich nun doch eine Pool-Implementierung brauche, kann ich damit auch verschiedene Unterklassen von Atom problemfrei speichern?