簡體   English   中英

通過引用或按值傳遞指針容器之間的區別

[英]Difference between passing by reference or by value a container of pointers

通常,在C ++中,我知道按值,按引用或指針進行解析之間的區別,但是在傳遞容器時感到困惑。

我的問題是按引用或按值傳遞指針容器有什么區別? 還有,通過引用傳遞非指針容器和通過值傳遞指針容器有什么區別。

更具體地說,在以下兩個問題中,如果'func()'更改了'myClass'參數的值,會發生什么:

  1. 之間有什么區別:

     void func(list<myClass*> myList); 

     void func(list<myClass*> &myList); 
  2. 之間有什么區別:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM