今日は本当に陰気なバグの原因を発見しました。これは、すべて安全に修正されますが、私は次のコードを実行したときに理由を理解したいと思います:関数スコープの静的変数がオブジェクトインスタンス間で持続するのはなぜですか?
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
私は常に静的なことを想定していましたクラスの同じインスタンスへの呼び出しの間だけ持続するでしょうか?