#include <iostream>
#include <list>
using namespace std;
class A{
private:
list<int*> data;
public:
A(list<int*> data_){data=data_;}
list<int*> getData(){return data;}
};
int main(){
list<int*> temp;
temp.push_back(new int(1));
temp.push_back(new int(2));
temp.push_back(new int(3));
temp.push_back(new int(4));
A a(temp);
// First Iteration
list<int*>::iterator it;
cout<<(a.getData()).size()<<endl;
for (it = (a.getData()).begin(); it != (a.getData()).end(); it++)
cout << *(*it) << endl;
// Second Iteration
list<int*> mylist = a.getData();
for (it = mylist.begin(); it != mylist.end(); it++)
cout << *(*it) << endl;
}
第一次迭代会导致分段错误,但降神会迭代不会。是什么导致了第一次迭代中的分割错误?
问题是
list<int*> getData(){return data;}
获取列表数据并制作列表的副本并返回该副本。 全班应该说:
class A{
private:
list<int*> data;
public:
A(list<int*>& data_) : data(data) {}
list<int*>& getData() {return data;}
};
因此,除非为数据赋值,否则不会进行复制。
您可以在这里尝试:https://onlinegdb.com/0qHTOAybI