struct new出来之后是建立在stack上的而不是在heap上
代码如下:
...
{
   System.Drawing.Point p;                    //问题1:这个p也是一个Reference吗?
   {
      p = new System.Drawing.Point(123,456);
   }                                          //问题2:在这个}之后为什么new出来的Point没有被销毁,它是建立在stack上的,那他什么时候被销毁呢?
}
...
请教大家

解决方案 »

  1.   

    System.Drawing.Point p;这里的p是某个类型的成员变量,其内存就是所在对象占用内存的一段,存储的是整个p的内存,不是指针(引用类型则是指针)它在某个方法内部时,也就是局部变量时,占用的才是stack的内存
      

  2.   

    不好意思 我没说清楚 上面这段代码是在某个方法里的
    比如
    private void Form1_Load(...)
    {
       System.Drawing.Point p;    
       {
          p = new System.Drawing.Point(123,456);
       }   //再问一下:
       int x;             //这时会为x在stack上开辟空间吗?好象要吧
       x = 1;             //Okey
       System.Drawing.Point pp;  //pp是stuct同样会在stack上开辟空间,但是没有new
       pp.X = 1           //Compile-time error 为什么? 
    }
      

  3.   

    System.Drawing.Point p;    
       {
          p = new System.Drawing.Point(123,456);
       }
    这是什么代码?
      

  4.   

    System.Drawing.Point p;    
       {
          p = new System.Drawing.Point(123,456);
       }
    这样的代码好象可以通过编译的 仅仅是忽略花括号 不过不推荐这样的写法int x;             //没有为x分配空间,这时使用x的话 就会提示使用未赋值的变量
    x = 1;             //此处相当于x=new int(1); int是基元类型,系统支持直接赋值. (用reflector看不到int源代码的更多的信息,看decimal类型的时候可以知道decimal有个=的操作符重载)System.Drawing.Point不是基元类型 使用前必须显式分配空间另外的 Sunmast(速马/MVP) 大哥已经说得很清楚了 :)
      

  5.   

    System.Drawing.Point不是基元类型  使用前必须显式分配空间 
    这句话是什么意思?
    System.Drawing.Point 是值类型
    例如:
        System.Drawing.Point p;   //这里已经为p在stack上开辟了空间了
        p = new Point(123,456);   //这个new运算符并不会为p开辟空间,它只起个初始化的作用
    是这样吧?
      

  6.   

    基元类型就是int long double等等之类 是系统直接提供支持的值类型基元类型一样要开辟空间 不然存哪儿?int i=1; //跟这个效果一样 int i = new int(0);
    //int类型有=的操作符重载(reflector看不到,或者这就是基元类型的表现之一吧)
    //当你直接赋值,如果变量没初始化 也就是没有开辟储存空间,系统会自动帮你开辟一个
    //如果你定义了个int变量之后没有给他赋值,系统就会提示不能使用为初始化的变化
    //类型定义之后还没有开辟空间 也就是没有初始化 同一个意思