[英]Passing pointers to functions by reference vs. by value, and using delete on pointer chains
假設我這樣做:
void func ( int* & refptr)
{
*refptr = 7;
}
int* ptr = new int;
func( ptr );
現在,如果我離開引用運算符,在func中完成的事情是否完全相同? 無論哪種方式,你在堆中訪問相同的int值,所以一種方式比另一種更好? 是否只在您嘗試更改指針...指向的位置時才使用引用運算符? 我不清楚這一點,我的教授沒有幫助。 :(
我的另一個問題與刪除操作符有關。 比方說我有:
int** ptr = new int*;
ptr* = new int;
如果我想釋放堆中分配的所有內存,我可以在ptr上使用delete一次,還是必須刪除ptr *然后ptr?
非常感謝。
通過引用傳遞指針沒有任何好處,盡管它也沒有受到傷害。 當然,通過引用傳遞指針允許您根據需要更改指針指向的位置。 你可以用雙指針完成同樣的事情。
在您的情況下,您需要兩次刪除。 這是你打電話后內存的樣子:
// Memory: free
int ** ptr = new int*;
// Memory: four bytes allocated for int*
ptr* = new int;
// Memory: four bytes allocated for int*, four bytes allocated for int
對於為int分配的四個字節,需要刪除一個,為int *分配的四個字節需要刪除一個。
在你的第一個例子中,確實沒有區別。 引用用於修改並且還用於避免復制(在指針的情況下這並不重要)。
在第二個問題中,您沒有正確的語法( *ptr
而不是ptr*
),但是,您必須分別刪除數組及其內容。
您可以使用標准模板庫類型( shared_ptr
, unique_ptr
)在刪除容器時自動刪除包含的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.