可变内存方法游戏循环中的范围

时间:2013-08-14 06:54:00

标签: c++

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

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

2 个答案:

答案 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; 
}