說我做這樣的事情環路創建新指針對象
for(int i = 0; i < 10; i++)
{
//create a pointer object using new
//use the object
}
我需要在循環使用後刪除指針對象? 我在想,如果我沒有刪除它,它會繼續創建一個新的對象10次,然後對象就會掛在那裏,吃資源。
說我做這樣的事情環路創建新指針對象
for(int i = 0; i < 10; i++)
{
//create a pointer object using new
//use the object
}
我需要在循環使用後刪除指針對象? 我在想,如果我沒有刪除它,它會繼續創建一個新的對象10次,然後對象就會掛在那裏,吃資源。
是的。
當你不再需要它時,你必須刪除你新出現的東西,否則你會得到內存泄漏。
如果您非常喜歡,可以使用智能指針(類似Boost的shared_pointer),然後只要指針超出範圍,最後一次對象就會自動刪除。
是的,你需要刪除它。但是,對循環的每次迭代進行新的/刪除可能不是最佳選擇 - 您需要提供更多的上下文以獲得更好的建議。
從技術上講,您需要刪除它們。
但是。我們有這個驚人的東西叫智能指針,這自動神奇地做到這一點。
for(int i = 0; i < 10; i++)
{
std::auto_ptr<int> x(new int(10));
// automatically deleted after each iteration.
}
是的,對於每個new
需要有相應的delete
。 (。而對於每一個new[]
一個delete[]
)
然而,C++的辦法是避免動態儲存儘可能多的和而採用地方,自動變量:
for(int i = 0; i < 10; ++i)
{
some_class object;
//use object
} // object gets destroyed here automatically
如果你需要動態分配這個對象(我懷疑,但有這種情況),那麼使用智能指針。一個智能指針將執行delete
你,無論你離開其範圍的方式屬於:
for(int i = 0; i < 10; ++i)
{
smart_ptr<some_class> object(new some_class());
//use object
} // object gets destroyed here automatically
當前的標準只知道一個智能指針,名爲std::auto_ptr
,這會對你在這個需要什麼案件。下一個標準將帶來更多,其中std::auto_ptr
的替代品,名爲std::unique_ptr
,以及一個共享所有權語義,名爲std::shared_ptr
。您的編譯器/標準庫實際上可能已經支持它們。如果沒有,您可以在boost的許多優秀圖書館中找到它們。
順便說一句,請注意我用++i
取代你i++
。在int
的情況下,這對您的方案沒有任何影響,但有些類型的i++
可能會創建不必要的副本。 (如果效率不關心你,爲什麼在C++中編程?)
我不認爲該聲明將編譯。你需要做'auto_ptr <> x(new int)' – 2010-11-18 20:39:46
@FredOverflow,在這種情況下你是不正確的。@Martin動態分配一個int並將其初始化爲10,而不是分配一個10個整數的數組。 – 2010-11-18 23:31:01
@Nathan:的確是我!感謝您指出,請+1提供您的評論。 – fredoverflow 2010-11-18 23:36:47