C ++ verknüpfte Listenzuweisung Operator
Versuche, einen Zuweisungsoperator für eine einzelne verknüpfte Listenklasse zu erstellen. Ich dachte, ich hätte es richtig gebaut, bekomme aber immer noch ein Speicherleck.
Die Klasse besteht aus einer First- und Last-Variablen. Und dann eine Knotenstruktur.
Die Knotenstruktur sieht folgendermaßen aus:
struct node
{
TYPE value;
node * next;
node * last;
};
Mein Zuweisungsoperator sieht so aus, er hat immer noch einen Speicherverlust
queue& queue::operator=(const queue &rhs){
if(this == &rhs ){
node *ptr = first;
node *temp;
while(ptr != NULL){
temp = ptr;
ptr = ptr->next;
delete temp; // release the memory pointed to by temp
}
delete ptr;
} else{
if (rhs.first != NULL ) {
first = new node(*rhs.first);
first->next = NULL;
last = first;
// first-> value = v.first->value; // copy constructor should have done that
node *curr = first;
node *otherCur = rhs.first;
node *ptr = first;
node *temp;
while(ptr != NULL){
temp = ptr;
ptr = ptr->next;
delete temp; // release the memory pointed to by temp
}
while(otherCur->next != NULL){
curr->next = new node(*otherCur->next);
curr->next->next = NULL;
last = curr->next;
// curr->next->value = otherCur->next->value;
curr = curr->next;
otherCur = otherCur->next;
}
// curr->next = NULL;
}
}
return *this;
}
BEARBEITEN
Copy Constructor (in Arbeit):
// copy constructor
queue::queue(const queue &v){
if (v.first != NULL ) {
first = new node(*v.first);
first->next = NULL;
last = first;
// first-> value = v.first->value; // copy constructor should have done that
node *curr = first;
node *otherCur = v.first;
while(otherCur->next != NULL){
curr->next = new node(*otherCur->next);
curr->next->next = NULL;
last = curr->next;
// curr->next->value = otherCur->next->value;
curr = curr->next;
otherCur = otherCur->next;
}
// curr->next = NULL;
}
}
Working Destructor:
queue::~queue(){
node *ptr = first;
node *temp;
while(ptr != NULL){
temp = ptr;
ptr = ptr->next;
delete temp; // release the memory pointed to by temp
}
}
Mitgliedervariablen der .H-Datei:
private:
// fill in here
node * first;
node * last;