c# - 如何根据 C++ 在同一内存位置重新初始化 C# 中的对象(或者它是自动完成的)?

标签 c# c++ memory-management cil

在 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/

相关文章:

c# - 尝试使用 DataBindCrossTable 方法显示折线图总是出现条形图

c# - 您如何使用自定义真值和假值从 Xml 中反序列化 boolean 值?

c# - 过滤后单击 ListView 时出现错误的项目

c++ - 从 Mat 到 vector<Vec3f> 和其他方式而不破坏图像

r - 为什么 R 在使用 read.csv() 时会占用这么多内存?

c++ - 这里创建了多少个对象实例?

c# - 如何创建实现少量接口(interface)(或接口(interface)子集)的类型变量?

c++ - 我正在学习 C++,文件处理。我遇到了一段我不明白的代码

C++ 将对象传递给函数

java - Java中的内存主机和内存参数xms和xmx之间的关系