[英]C++ Pointers and Memory Deallocation
我不太習慣嚴格的類型檢查和較低級別的東西,例如釋放。 最近,在嘗試按照以下方式寫東西時
// Product is a struct I defined earlier, nothing fancy
vector<string, Product>::iterator it;
// Do some stuff with the iterator...
// And now I know I won't be using the iterator again
map<string, Product>::iterator it;
但是,這產生了錯誤“局部變量“ it”的重復聲明”。 所以我的問題就是,為什么會這樣? 我研究了內存解構,但據我所知,顯然不可能解構迭代器,因為它們實際上是指針? 如果您知道不再需要舊的變量,C ++真的不允許您對不同的變量使用相同的名稱嗎?或者通常您會將它們釋放到內存中嗎?
由於it
在同一范圍內 ,因此無法重新聲明:變量陰影不適用於同一范圍。
一種解決方法是使用作用域塊:
// Product is a struct I defined earlier, nothing fancy
{
vector<string, Product>::iterator it;
// Do some stuff with the iterator...
// And now I know I won't be using the iterator again
}
{
map<string, Product>::iterator it;
// However, this yielded the error 'duplicate declaration
// Not any more!
}
實際上,在C ++中,您僅需要作用域塊之一,但是可以將其解釋為混淆的不對稱性。 Java試圖解決這個問題,但是慘敗,因為您可以刪除第二對而不是第一對!
不管使用哪種語言,如果在相同范圍內為兩個不同的變量賦予相同的名稱(它們的意思是不同的東西),您將[編輯]混淆后面的每個人(包括此變量)案例)。 對於需要維護您的代碼的人來說,這是至關重要的。
盡快擺脫這種習慣。 語言為您提供什么都無所謂。 只是不要這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.