我將一些對象存儲在向量中。當我調用這個使用引用的對象的成員函數時,程序終止(沒有錯誤)。我寫了下面的代碼做一些測試。它在添加元素之後會出現接縫,第一個入口中的引用失敗。爲什麼是這樣,我能做些什麼來避免這個問題?當我使用指針而不是引用時,這是完全一樣的行爲。包含引用或指針的對象的向量
#include <iostream>
#include <vector>
using namespace std;
class A{
public:
A(int i) : var(i), ref(var) {}
int get_var() {return var;}
int get_ref() {return ref;}
private:
int var;
int& ref;
};
int main()
{
vector<A> v;
for(unsigned int i=0;i<=2 ;i++){
v.emplace_back(i+5);
cout<<"entry "<<i<<":"<<endl;
cout<<" var="<<v.at(i).get_var()<<endl;
cout<<" ref="<<v.at(i).get_ref()<<endl;
}
cout<<endl;
for(unsigned int i=0;i<=2 ;i++){
cout<<"entry "<<i<<":"<<endl;
cout<<" var="<<v.at(i).get_var()<<endl;
cout<<" ref="<<v.at(i).get_ref()<<endl;
}
return 0;
}
輸出是:
entry 0:
var=5
ref=5
entry 1:
var=6
ref=6
entry 2:
var=7
ref=7
entry 0:
var=5
ref=0 /////////////here it happens!
entry 1:
var=6
ref=6
entry 2:
var=7
ref=7
v has 3 entries
正在使用哪個編譯器和版本?使用'at'也可能會導致問題,具體取決於哪個編譯器。我一直沒有找到討論編譯器遇到'at'問題的帖子。如果有疑問,請使用'[]'運算符。在這種情況下,它看起來像'v [i] .get_var()'和'v [i] .get_ref()'。 –
@愛德華你爲什麼添加C++ 11標籤? C++標籤不夠用 - 關於此問題有沒有特定於C++ 11的東西? – Tom
嗨,我使用gcc 4.8.1。使用uf'[]'沒有區別。 – dani