我不得不簡化一些我的代碼來問這個問題。但是,在下面的代碼中,我沒有聲明x
作爲參考類型,這意味着一旦函數退出,減量的更改就會「忘記」了。從函數內部改變對象狀態
解決這個問題的最聰明的方法是宣佈x
爲AnotherClass& x
?
void MyClass::myFunc(unordered_map<int, AnotherClass>* dictionary, int z, int y){
AnotherClass x = dictionary->at(z);
//Does this change on x get "forgotten" in terms of what dictionary stores
//once myFunc() has finished, because x is not a reference/pointer type?
x.changeSomething(y--);
}
class MyClass{
public:
private:
myFunc(unordered_map<int, AnotherClass>* dictionary, int z);
unordered_map<int, AnotherClass>* dictionary
};
只是一個額外的問題,如果我不是修改字典,但我創建了一個新的AnotherClass對象插入字典 - 我不需要申報新的AnotherClass對象作爲引用類型,它可以只是AnotherClass new_obj? – user997112
@ user997112我不確定我是否理解這個問題,但也許這會澄清一些事情:1)參考必須引用某些內容。它只是一個對象的別名。 2)當你在地圖中放置一個對象時,地圖會自己創建該對象的副本。所以你*可以*給予通過地圖對另一個對象的引用,但它沒有區別,因爲地圖會複製它引用的對象。 – juanchopanza
我認爲你無論如何都回答了 - 我無法聲明一個新的引用類型的字典元素,因爲如你所說,你需要一個現有的元素,而且我正在詢問一個新的元素進入字典。 – user997112