2011-11-09 116 views
1
/* simple class that has a vector of ints within it */ 
class A 
{ 
public: 
    vector<int> int_list; 
}; 

/* some function that just returns an int, defined elsewhere */ 
int foo(); 

/* I want to fill the object's int_list up */ 
A a_obj; 

int main() { 
    for (int i = 0; i < 10; i++) { 
     int num = foo(); 
     a_obj.int_list.push_back(num); 
    } 
} 

num的範圍是否僅限於for循環?一旦for循環退出,它會被銷燬嗎?如果我嘗試訪問a_obj的號碼int_list中的號碼,我將無法將其中的號碼銷燬嗎?關於我的變量範圍需要一些解釋

回答

5

num的範圍是否僅限於for循環?

一次for循環退出將它銷燬?

它會在每次迭代後被銷燬,然後再爲下一次創建!

如果我嘗試訪問的int_lista_obj數字將我不能因爲數字內將已被破壞?

容器存儲副本,所以你不必擔心這一點。

你只會遇到這類與引用和指針有關的問題。

+0

非常感謝你,這正是我所需要的:) – martega

+0

@martega:我知道:) –

0

是的,循環內定義的變量或{ ... }的任何塊將僅存在於該塊內,並且在離開塊時將被銷燬。

在循環的情況下,塊將在每次迭代時「創建」,因此在您的示例中,num不能從先前的迭代中引用。

0

是的,每次for循環迭代它都會在堆棧上創建一個新的num實例。但是您將num的值傳遞到int_list中,直到a_obj超出範圍

1

是否將num的作用域限制爲for循環?一旦 for循環退出,它會被銷燬嗎?

是的,因爲num是for循環的本地。

如果我嘗試訪問a_obj的int_list中的數字,我不能 因爲裏面的數字已經被銷燬?

沒有,內部列表中的號碼也不會退出時銷燬for循環,因爲你複製號碼列表,並在A a_obj;全球範圍宣佈,這意味着它能夠在年底銷燬你的程序。