我正在试验一个链表。我的函数“null”似乎修改了我的列表,即使列表不是通过引用传递的。我已经读到,这些问题可能发生在作为普通按值调用参数传递的对象上,这也是类中的数据未在良好的 OOP 中声明为公共成员的原因之一。我已经尝试将 null 函数作为列表的成员函数,它工作正常,但我仍然想了解为什么这种方式不能正常工作。谢谢
#include <iostream>
#include <new>
#include <time.h>
#include <stdlib.h>
using namespace std;
class list{
public:
struct element {
int data;
element* next;
};
element * head;
list(){
head=NULL;
}
~list(){
while (head!=NULL){
element *e = head->next;
delete head;
head = e;
}
cout<<"Destructing..\n";
}
void add (int value){
element *e = new element;
e->data = value;
e->next = head;
head= e;
}
};
void fill10 (class list & l){
for (int i= 0; i<10 ;i++){
l.add((rand()%10)+1);
}
}
bool null (class list l){
if (l.head!=NULL){ return false;}
return true;
}
int main ()
{
srand(time(NULL));
class list l;
fill10(l);
cout<<l.head->data<<endl;
cout<<l.head<<endl;
cout<<endl<<null(l)<<endl;//when I comment this everything works out as expected
cout<<l.head->data<<endl; //this data is not the same anymore after null is called
cout<<l.head<<endl;
return 0;
}