我花了很多時間去搜索錯誤的原因。 下面是我使用vector來存儲數據的C++程序。我已經看到,當vector
增加自我大小,那麼所有的引用都是改變。所以保存對push_back()
對象的引用back()
對象是愚蠢的,沒有意義。cpp relocate vector
class Test{
public :
int wiek;
};
int main(int argc, char **argv)
{
std::vector<Test> v;
std::vector<Test*> vv;
for (int i = 0; i < 12; i++) {
Test t;
t.wiek = 10;
v.push_back(t);
vv.push_back(&v.back());
}
Test& m = v.back();
for (int i = 0; i < 24; i++) {
Test t;
t.wiek = 123;
v.push_back(t);
vv.push_back(&v.back());
}
for (int i = 0; i < 36; i++) {
std::cout<<"vv.at(i)->wiek : "<<vv.at(i)->wiek<<"\n";
}
// vv.at(i)->wiek : 1619638984
// vv.at(i)->wiek : 167838876
// vv.at(i)->wiek : 167838896
// vv.at(i)->wiek : 167838900
// vv.at(i)->wiek : 167839152
// vv.at(i)->wiek : 167839156
// vv.at(i)->wiek : 167839160
// vv.at(i)->wiek : 167839164
// vv.at(i)->wiek : 167838872
// vv.at(i)->wiek : 167838876
// vv.at(i)->wiek : 167838880
// vv.at(i)->wiek : 167838884
// vv.at(i)->wiek : 167838888
// vv.at(i)->wiek : 167838892
// vv.at(i)->wiek : 167838896
// vv.at(i)->wiek : 167838900
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// ...
//
return 1;
}
我有權利嗎?
你有什麼權利?你的困惑在哪裏?你說你已經知道你在做什麼使參考無效。 – NathanOliver
@Eddge不完全。他們將一個局部變量插入矢量(複製),然後保存添加的矢量元素位置的地址。類似但不同於直接存儲自動存儲變量的地址。 – crashmstr
@crashmstr你是正確的感謝糾正。 – Eddge