C++ 游戏循环中的可变记忆方法作用域
我有一个每秒执行30次的游戏更新循环。我想知道一旦变量内存离开方法作用域,它会发生什么,例如C++ 游戏循环中的可变记忆方法作用域,c++,C++,我有一个每秒执行30次的游戏更新循环。我想知道一旦变量内存离开方法作用域,它会发生什么,例如 void updateLoop(double delta) { double TestVar = 1; // << Does this variable get "deleted from memory" // once it this method completes? What exactly happens? } void up
void updateLoop(double delta)
{
double TestVar = 1; // << Does this variable get "deleted from memory"
// once it this method completes? What exactly happens?
}
void updateLoop(双增量)
{
double TestVar=1;//这里的TestVar
是一个局部变量
void updateLoop(double delta)
{
static double TestVar = 1;
}
这意味着它的范围仅限于声明下面的所有代码,直到封闭块的末尾。也就是说,从声明到块的末尾(直到}
)
它的生存期与块内的执行时间相同
根据标准:
3.7.3自动存储持续时间[basic.stc.auto]
块作用域变量显式声明的寄存器或未显式声明的静态或外部变量具有自动存储持续时间。这些实体的存储将持续到创建它们的块退出为止
这意味着:自动/局部非静态变量的生存期仅限于其范围。是的,每次函数执行结束时,它都会被销毁(在您的情况下,它的创建/销毁时间为每秒30次)
如果希望它在执行后保持值,请使用此函数所属类的成员变量,或者使用静态变量或全局变量
void updateLoop(double delta)
{
static double TestVar = 1;
}
但如果您试图在此函数中动态分配内存,请确保始终对分配内存的指针执行删除操作,否则将导致内存泄漏。因为一旦程序超出作用域,您分配的指针将被销毁,但分配给该指针指向的内存不会被销毁。因此,您将丢失对它的引用,从而导致内存泄漏
void updateLoop(double delta)
{
int* TestVar = new int;
// your codes
delete TestVar;
}
方法中声明的不是指向某个对象的指针的所有内容在退出后都将被删除。可能有助于您了解函数局部变量(和函数参数)的存储位置和方式。因此,如果我要在其中创建新对象,计算机在块后如何在内存中处理它们?@OllyDixon这取决于您如何创建新对象。如果以与TestVar
相同的方式声明它们,它们将在作用域的末尾被销毁。这与静态变量或动态分配内存的情况不同。