今天我发现了一个非常隐蔽的bug的来源。这是现在所有的安全固定的,但我想明白为什么当我执行下面的代码:为什么我的函数范围的静态变量在对象实例之间持续存在?
using namespace System;
ref class EvilClass
{
public:
EvilClass()
{
}
void Print()
{
static bool enablePrint = false;
if(enablePrint)
{
Console::WriteLine("PrintEnabled");
}
else
{
Console::WriteLine("PrintDisabled");
}
enablePrint = true;
}
};
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
EvilClass^ ec = gcnew EvilClass();
ec->Print();
ec->Print();
delete ec;
ec = nullptr;
ec = gcnew EvilClass();
ec->Print();
ec->Print();
delete ec;
ec = nullptr;
return 0;
}
...我得到如下:
Hello World
PrintDisabled
PrintEnabled
PrintEnabled
PrintEnabled
我一直以为,静态只会在对同一个类实例的调用之间持续存在?