0

我有一个每秒执行大约 30 次的游戏更新循环。我想知道变量内存离开方法范围后会发生什么,例如。

void updateLoop(double delta)
{
    double TestVar = 1; // << Does this variable get "deleted from memory"
                        // once it this method completes? What exactly happens?
}
4

2 回答 2

1

TestVar是一个局部变量。

这意味着它的范围仅限于声明下方的所有代码,直到封闭块的末尾。那是从它的声明到块的末尾(直到})。

只要执行在块内,它的生命周期就是。

从标准:

3.7.3 自动存储时长 [basic.stc.auto]

显式声明的块范围变量register 或未显式声明的 static 或 extern 具有自动存储持续时间。这些实体的存储一直持续到创建它们的块退出。

这意味着:自动/本地非静态变量的生命周期仅限于它们的作用域。

于 2013-08-14T06:59:02.410 回答
1

是的,每次函数执行结束时它都会被销毁(在你的情况下,它每秒被创建/销毁 30 次)。

如果您希望它在执行后保持值,请改用该函数所属类的成员变量或使用静态变量或全局变量。

void updateLoop(double delta)
{
    static double TestVar = 1; 
}

但是,如果您尝试在此函数内动态分配内存,请确保始终对分配内存的指针执行删除操作,否则会出现内存泄漏。因为一旦程序超出范围,您分配的指针将被销毁,但是该指针指向的分配的内存不会被销毁。因此,您将丢失对它的引用,从而导致内存泄漏。

void updateLoop(double delta)
{
    int* TestVar = new int;
    // your codes
    delete TestVar; 
}
于 2013-08-14T07:16:14.953 回答