[英]Difference between passing by reference or by value a container of pointers
通常,在C ++中,我知道按值,按引用或指針進行解析之間的區別,但是在傳遞容器時感到困惑。
我的問題是按引用或按值傳遞指針容器有什么區別? 還有,通過引用傳遞非指針容器和通過值傳遞指針容器有什么區別。
更具體地說,在以下兩個問題中,如果'func()'更改了'myClass'參數的值,會發生什么:
之間有什么區別:
void func(list<myClass*> myList);
和
void func(list<myClass*> &myList);
之間有什么區別:
void func(list<myClass> &myList);
和
void func(list<myClass*> myList);
編輯:如果您希望將調用函數的更改反映到原始對象,則您擁有哪些選項,它們的區別是什么? 據我了解,您有以下選擇:
void func(list<myClass*>& myList);
要么
void func(list<myClass>& myList);
void func(list<*myClass> myList);
該調用將復制參數並創建一個新列表。 該副本上的任何修改都不會反映在調用參數上。
void func(list<*myClass>& myList);
該調用不會復制參數。 對列表的任何修改都會反映到原始列表中(因為它正在使用它),因為參數引用了此列表。
void func(const list<*myClass>& myList);
通常,人們使用const list<*myClass>&
來避免復制並禁止修改。
void func(list<myClass>* myList);
我假設這是您想問的問題,而不是list<*myClass>
。 因此,這傳遞了指針而不是引用。 這意味着myList
可能不存在,這與必須引用現有對象的引用相反。 通常用於可選參數。
void func(list<myClass> myList);
顯然,我弄錯了,這才是真正的比較。
這只是另一個對象,無法將list<myClass>
轉換為list<*myClass>
。 如果myClass
是虛擬的,並且在其他地方進行管理,則指針列表可能會很有趣。
因此,這兩個調用之間的區別基本上是您處理對象的方式,要么按值,因為您希望對象本身在列表中(是的,您希望通過引用傳遞它們),或者只需要一個指針列表(但是仍應按引用或const引用傳遞它們,幾乎絕不按值傳遞它們,除非您需要列表的副本進行修改)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.