阿宽

Nothing is more powerful than habit!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

new 操作符所做的事情

Posted on 2011-11-13 09:44  宽田  阅读(384)  评论(1编辑  收藏  举报

1、它计算类及其所有基类(一直到System.Object,虽然它没有定义自己的实例字段)中定义的所有实例字段需要的字节数。堆上的每个对象都需要一些额外的成员——即“类型指针”和“同步块索引”,这些额外成用于CLR管理对象,这些额外成员的字节数会计入对象大小。

2、从托管堆中分配指定类要求的字节数,从而分配对象的内存,分配的所有字节都设为零。

3、初始化对象的“类型对象指针”和“同步块索引”成员。

4、调用类的实例构造器,向其传入在对new的调用中指定的任何实参。大多数编译器都在构造器中自动生成代码来调用一个基类构造器。每个类构造器在调用时,都要负责初始化由这个类定义的实例字段。最终调用的是System.Object的构造器,该构造器只是简单地返回,不会做任何事情。

5、new执行了所有这引起操作之后,会返回指向新建对象一个引用(或指针)。