2012-04-15 124 views
0

希望這不是問題的基礎。我不知道是否有做在C++中爲for循環中的變量分配新對象

while (1) { 
    int *a = new int(1); 
    // Do stuff with a 
} 

,而不是

int *a; 
while (1) { 
    a = new int(1); 
    // Do stuff with a 
} 

在這兩種情況下,相同數量的對象是動態分配的差異。但是在第一個例子中int關鍵字在循環中使用的事實會影響使用的內存嗎?

+2

你在這裏使用'new'有什麼原因嗎? – Pubby 2012-04-15 03:26:20

+0

我有一個需要動態分配對象的容器類。而且我只是好奇。 – gsingh2011 2012-04-15 03:27:26

回答

4

區別是範圍

while (1) { 
    int *a = new int(1); 
    // Do stuff with a 

    // Don't forget to delete a. 
} 

// Cannot access `a` here... 

鑑於:

int *a; 
while (1) { 
    a = new int(1); 
    // Do stuff with a 

    // Don't forget to delete a. 
} 

// Can access `a` here. 

您有您的兩個例子a memory leak。首選smart pointers

+0

好的,我不確定是否在第一個示例中重新創建了循環的每個迭代的引用。而且,是的,這意味着刪除一個是在某處/ /與一個東西。謝謝。 – gsingh2011 2012-04-15 03:26:36

+0

我並不認爲這是暗示的。你究竟在做什麼? – Johnsyweb 2012-04-15 03:29:50

+0

我被要求使用只接受動態分配對象的容器類。我對變量'a'發生了什麼事情感到好奇。在第二個例子中,使用了相同的引用,但在第一個中,我不確定是否在內存中創建了新引用,並且在程序退出之前舊引用會在堆棧中。從你所說的話,即使我重新聲明它是一個整數,也使用相同的參考? – gsingh2011 2012-04-15 03:32:56

4

它們基本上是相同的,幾乎肯定會編譯相同。即使它們不是,你正在做堆分配的事實比另外一個堆分配的成本要高得多。

儘管首選,但它具有更嚴格的範圍。