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



我在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;
}

在main中,即使obj是nullptr并被称为SetI,它也没有任何崩溃。如果Test的变量i变成了成员变量,调用nullptr的SetI就崩溃了。原因是什么呢?

你是说普通成员变量而不是静态成员?

static成员的内存总是保留的。它位于其他地方,而不是在任何已创建对象的内存位置。这就是为什么它可以用一个空类来设置。

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

最新更新