C#高级编程学习笔记(四) 内存管理和指针
七、内存管理和指针
1、后台内在管理
2、释放未托管的资源
在定义一个类时可以使用两种机制来自动释放资源:
声明一个析构函数(或终结器),作为类的一个成员。
在类中实现System.IDisposable接口
析构函数:类似于一个方法,但前面加~。没有返回类型,不带参数,没有访问修饰符。
C#编译器在编译析构函数时,会隐式地把析构函数的代码编译为Finalize()方法的对应代码,确保执行父类的Finalize()方法。
C#析构函数执行会延迟对象最终从内存中删除的时间。因为没有析构函数的对象会在垃圾收集器的一次处理中从内存中删除,但有析构函数的对象需要两次处理才能删除:第一次调用析构函数时,没有删除对象,第二次调用才真正删除对象。可参考浅谈C#的垃圾回收之引子:关于二次回收机制、析构函数、Dispose、and Finalize etc.. (http://www.cnblogs.com/sban/archive/2007/12/02/978737.html)
IDisposable接口:C#中推荐使用System.IDisposable接口替代析构函数
3、不安全的代码
C#只允许标记unsafe的代码使用指针。
C#中,*符号与类型有关,C++中,*与变量名相关。如int* px,py对应于C++中的int *px,*py
&表示“取地址”,并把一个值类型转换为指针,例如int转换为*int.这个运算符称为寻址运算符。
*表示“获取地址的内容”,把一个指针转换为值数据类型(例如*float转换为float).这个运算符称为“间接寻址运算符”(有时称“取消引用运算符”)