/* 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
中的数字,我将无法将内部数字销毁?
答案 0 :(得分:5)
num
的范围是否仅限于for循环?
是
退出for循环后它会被销毁吗?
每次迭代后它都会被销毁,然后再为下一次迭代创建!
如果我尝试访问
a_obj
int_list
中的数字,我将无法将内部数字销毁?
容器存储副本,因此您不必担心这一点。
你只会遇到引用和指针这些问题。
答案 1 :(得分:1)
num的范围是否仅限于for循环?它会被摧毁一次吗? 退出for循环?
是的,因为num
是for循环的本地。
如果我尝试访问a_obj的int_list中的数字,我将无法访问 因为里面的数字会被摧毁吗?
不,列表中的数字在退出for循环时不会被销毁,因为你将数字复制到列表中并且A a_obj;
在全局范围内声明,这意味着它在最后被销毁你的计划。
答案 2 :(得分:0)
是的,循环中定义的变量或{ ... }
的任何块将仅存在于该块内,并且在离开块时将被销毁。
在循环的情况下,块将在每次迭代时“创建”,因此在您的示例中num
无法从早期迭代中引用。
答案 3 :(得分:0)
是的,每次for循环迭代它都会在堆栈上创建一个新的num实例。但是你将num的值传递给int_list,它将被存储,直到a_obj超出范围