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