簡體   English   中英

C ++指針和內存釋放

[英]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.

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