我有一个游戏更新循环,每秒执行约30次。我想知道变量存储器一旦离开方法范围会发生什么,例如。
void updateLoop(double delta)
{
double TestVar = 1; // << Does this variable get "deleted from memory"
// once it this method completes? What exactly happens?
}
答案 0 :(得分:1)
此处TestVar
是一个局部变量。
这意味着它在范围内限于声明下面的所有代码,直到封闭块结束。这是从它的声明到块的结尾(直到}
)。
生命周期是只要执行在块内。
来自标准:
3.7.3自动存储时间[basic.stc.auto]
块范围变量显式声明寄存器或未显式声明为static或extern具有自动存储持续时间。这些实体的存储将持续到创建它们的块退出。
表示:自动/本地非静态变量生命周期仅限于其范围。
答案 1 :(得分:1)
是的,每次函数执行结束时它都会被破坏(在你的情况下,它每秒被创建/销毁30次)。
如果您希望它在执行后保持值,请使用此函数所属类的成员变量,或使用静态变量或全局变量。
void updateLoop(double delta)
{
static double TestVar = 1;
}
但是如果您尝试在此函数内动态分配内存,请确保始终对分配了内存的指针执行 delete 操作,否则会导致内存泄漏。因为一旦程序超出范围,你分配的指针就会被销毁,但是这个指针所指向的内存不会被破坏。因此,您将丢失对它的引用,从而导致内存泄漏。
void updateLoop(double delta)
{
int* TestVar = new int;
// your codes
delete TestVar;
}