我在c ++ / cli中有以下代码。
#include "stdafx.h"
using namespace System;
ref class Test
{
public:
void SetI(int k)
{
i = k;
}
private:
static int i = 0;
};
int main(array<System::String ^> ^args)
{
Test ^obj = nullptr;
obj->SetI(10);
Console::WriteLine(L"Hello World");
return 0;
}
在主要事件中,尽管obj是nullptr并且称为SetI,但它没有任何崩溃。 如果Test的varibale i成为成员变量,则在nullptr上调用的SetI崩溃。 可能是什么原因。
答案 0 :(得分:0)
你的意思是常规成员变量而不是静态成员?
静态成员的内存始终保留。它存在于其他地方,而不是任何创建对象的内存位置。这就是它可以用null类设置的原因。
普通成员存在于已创建对象的内存中,如果不存在此类对象,则会出现段错误。