2016-10-16 22 views
0

我有一個名爲VEC的自定義矢量類和一個名爲Data的類,該類包含稱爲v的VEC的std :: vector。VEC充當一個非常簡單的矢量,它只存儲4個值。函數退出後矢量數據消失

vector<VEC> v; 

在其他地方,我有兩個功能;過程和創造。我的process()應該接受一個Data對象作爲參數,然後改變它的內容。它被聲明爲

void myClass::process(Data data); 

在這個函數中,我創建了血管內皮細胞的臨時載體,然後把它的內容爲數據的五:

VEC v1(1, 1, 1, 1); 
VEC v2(2, 2, 2, 2); 
VEC v3(3, 3, 3, 3); 
vector<VEC> temp; 
temp.push_back(v1); 
temp.push_back(v2); 
temp.push_back(v3); 

for (int i = 0; i < 3; i++) 
    { 
    data.v.push_back(vtemp[i]); 
    } 
cout << data.v.size() << endl; 

正如你所期望的,這個打印出3

現在,這裏是問題發生的地方。另一個函數create()在矢量數據列表中的每個Data對象上調用process()。出於測試目的,這個只使用第一個元素。

void myClass::create() { 
    process(dataList[0]); 
    cout << dataList[0].v.size() << endl; 
    } 

這是它打印出

3 
0 

正如你所看到的,它正常工作的過程中()函數,但V向量似乎儘快清空本身作爲函數退出。這是一個問題,因爲我需要每個Data對象在process()被調用後保存它的新v內容。這裏發生了什麼?

+3

您似乎正在操作'Data'的副本。如果您打算修改它,請參考參考。 – krzaq

回答

1

如果你想操縱你的Data對象,你process函數必須聲明爲這樣:

void myClass::process(Data& data); 

你必須通過引用傳遞,否則的data副本將被製成,當你將它傳遞給功能。上述函數原型中的Data之後的符號(&)意味着「引用Data類型的變量data」。

您的方式,該功能對data的任何更改將完成只有到這個本地變量。因此,當process函數退出時,這些更改將被破壞。