譬如有个Struct:public struct OMG
{
    public int a;
    public OMG(int inInt)
    {
        this.a = inInt;
    }
}现在用 new 来初始化它:OMG omg = new OMG(37);这个 omg 是跟踪句柄引用还是直接表示这个实例对象? 这个实力对象被放在堆中还是栈中?

解决方案 »

  1.   

    不会,struct必定不是引用类型,即使用new创建struct,它仍然不是引用类型,这点和c++不同,
      

  2.   

    OMG   omg   =   new   OMG(37); 这句话如果在方法中调用,那么omg必定分配在栈中,
      

  3.   

    Struct是值类型,不是引用类型.
      

  4.   

    new   OMG(37);只是指示调用构造函数初始化实例,并不是在堆中分配对象内存,这点和c++不同,c#的new运算符并不隐含要在堆中分配内存的操作,而只是用适当方法创建实例并调用构造函数,如果有构造函数的话,
      

  5.   

    那么是否有那种 omg 被分配在堆中的情况?
      

  6.   

    不可能有,struct都分配在栈中,除非它是另一个类的成员:class A
    {
        public OMG omg=new OMG(37);
    }这样,omg作为类A实例的一部分就被分配在堆中了,
      

  7.   

    不过装箱操作可能会让结构放在堆中,比如:object omg=new OMG(37);omg就会在堆中,因为omg是引用类型object,
      

  8.   

    new运算符关类型P事,关堆栈P事...