-1
我在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;
}
在主要eventhough obj是nullptr和調用SetI,它沒有任何崩潰的工作。 如果Test的varibale i成爲成員變量,則SetI調用nullptr墜毀。 可能是什麼原因。
C++/CLI沒有C#功能,承諾您在呼叫站點獲得NRE。 UB就像使用本地C++一樣。它不會崩潰,因爲您不取消引用* this,該變量是靜態的。當然它不是靜態的。 –