C#中New操作符
CLR要求所有对象都用new操作符来创建,如下面这样:
Employee e = new Employee("zhangsan");
以下是new 操作符所做的事情。
1、它计算类型及其所有基类型(一直到System.Object,虽然它没有定义自己的实例字段)中定义的所有实例字段需要的字节数。堆上的每个对象都需要一些额外的成员——即"类型对象指针"和"同步块索引",这些成员由CLR用于管理对象。这些额外成员的字节数会计入对象大小。
2、它从托管堆中分配指定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为零。
3、它初始化对象的"类型对象指针"和"同步块索引"成员。
4、调用类型的实例构造器,向其传入在对new的调用中指定的任何实参。大多数编译器都在构造器中自动生成代码来调用一个基类构造器。每个类型的构造器在调用时,都要负责初始化由这个类型定义的实例字段。最终调用的是System.Object的构造器,该构造器只是简单地返回,不会做其他任何事情。
new 执行了所有这些操作之后,会返回指向新建对象一个引用(指针)。
并且,没有和new操作符对应的一个delete操作符;换言之,没有办法显示释放为一个对象分配的内存。CLR采用了垃圾回收机制,能自动检测到一个对象不再被使用或访问,并自动释放对象内容