在 C++ 中,我使用了像
这样的结构#include "stdafx.h"
#include "TestStaticPointer.h"
MyClass* MyClass::myStaticPointer;
int main()
{
ProgrammStart();
return 0;
}
void ProgrammStart()
{
MyClass::myStaticPointer = new MyClass();
}
void SomeProgrammPlace()
{
*MyClass::myStaticPointer = MyClass();
}
所以我只在 ProgrammStart() 中分配了一次内存,然后我使用相同的内存位置重新初始化我的静态指针(没有通过“new”重新分配),我只使用了构造“= MyClass();”。
我如何在 C# 中执行此操作? IL 是否承担了所有关于分配的工作?就 C++ 而言,"new"是否总是意味着"new"内存位置(内存中的不同位置)?
最佳答案
首先,您还没有重新初始化任何东西。您在这里所做的是作业。您创建了一个新的 MyClass
对象,并通过调用其赋值运算符将现有 MyClass
对象的状态修改为与新对象相同。
在 C# 中给 struct
赋值时会发生同样的事情:
class Program
{
static void Main(string[] args)
{
MyStruct mc = new MyStruct(10);
// Will print 10
Console.WriteLine(mc.i);
unsafe
{
MyStruct* pmc = &mc;
// Will print the address of mc
Console.WriteLine((IntPtr)pmc);
}
// Assign to mc
mc = new MyStruct(20);
// Will print 20; mc was modified
Console.WriteLine(mc.i);
unsafe
{
MyStruct* p = &mc;
// Will print the same address as above.
// mc was modified in place
// because structs have value semantics
Console.WriteLine((IntPtr)p);
}
}
}
struct MyStruct
{
public MyStruct(int i)
{
this.i = i;
}
public int i;
}
关于c# - 如何根据 C++ 在同一内存位置重新初始化 C# 中的对象(或者它是自动完成的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52460897/