从null对象的成员函数初始化静态成员

时间:2016-09-27 05:55:12

标签: .net c++-cli

我在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崩溃。 可能是什么原因。

1 个答案:

答案 0 :(得分:0)

你的意思是常规成员变量而不是静态成员?

静态成员的内存始终保留。它存在于其他地方,而不是任何创建对象的内存位置。这就是它可以用null类设置的原因。

普通成员存在于已创建对象的内存中,如果不存在此类对象,则会出现段错误。