我很难弄清楚我的递归复制构造函数有什么问题。
我的班级是一个常规未分类的动态链接列表。
struct Node{
int info;
Node *next;
};
以下只是查看我将要使用的逻辑的简单方法
class Class{
public:
//constructor
Class(){ data = NULL;}
//copy consturctor
Class(const Class& second){
cout << "This is copy constructor" << endl;
//recursive copy contructor
Class temp;
temp.data = second.data;
if (temp.data == NULL) return; //base condition
int x = temp.data->info;
temp.data = second.data->next;
insert(x);
Class::Class(temp);
//regular copy constructor
/*if (second.data == NULL){//empty
data = NULL;
return;
}
Node *temp = second.data;
Node *location = new Node;
location->info = temp->info;
data = location;
location->next = NULL;
temp = temp->next;
while (temp != NULL){
location->next = new Node;
location = location->next;
location->next = NULL;
location->info = temp->info;
temp = temp->next;
}*/
}
//destructor
~Class(){
cout << "This is destructor" << endl;
//recursive destructor
/*Node *temp;
temp = data;
if (temp == NULL) return;
else{
data = data->next;
delete temp;
Class::~Class();
}*/
//reglar destructor
Node *temp = data;
while (data != NULL){
temp = data;
data = data->next;
delete temp;
}
}
void insert(int x){
Node *temp = new Node;
temp->info = x;
temp->next = data;
data = temp;
}
void print(){
Node *temp = data;
while (temp != NULL){
cout << temp->info;
temp = temp->next;
}
cout << endl;
}
private:
Node *data;
};
主要功能:
void main(){
Class object;
object.insert(1);
object.insert(2);
object.insert(3);
object.insert(4);
object.print();
Class object2 = object;
object2.print();
}
好的,从我的“很多”实验来看,似乎问题出现在递归完成并且处理开始倒退时。因此,如果这是2个节点,则第3个节点为NULL。由于
,递归完成了if (temp == NULL) return;
每次完成一个堆栈时都会调用析构函数,对析构函数的第一次调用是NULL对象(第3次和最后一次)的调用,这很好。对析构函数的下一次调用是故障开始的地方。似乎传递给析构函数的数据具有垃圾值。
事实上,复制构造函数中的所有内容都很顺利,因为正确地提取和插入数据。为什么析构函数有问题?
注意:有一个递归析构函数(已注释掉)和一个常规析构函数。他们都工作正常,但我正在使用常规的,以防意外的突发事件。
我还包括并注释掉常规复制构造函数。
提前致谢。