黑白程式

黑白程式

导航

Delphi读书笔记摘录

Free()方法不是类的析构函数,Free()负责的是调用类的析构函数来销毁对象
现在就来探讨一下 Object Pascal 中对象生存与销毁的秘密吧! 每个应用程序可以获得的内存空间分为两种:堆(heap)和栈(stack)。 堆又称为“自由存储区”,其中的内存空间的分配与释放是必须由程序员来控制的。栈又称为“自动存储区”,其中的内存空间的分配与释放是由编译器和系统自动完成的,不需要程序员过问。函数调用时按值传递的参数所占空间、函数中的局部变量等,都是在栈中被分配空间的。Objecgt Pascal 遵循所谓的“引用/值”模型。无论在参数传递还是变量定义中,简单类型(如 Integer、Cardinal、char以及 record 等)被按值传递或使用,其内存空间从栈中分配。而复杂类型(class)则被按引用传递或使用,其内存空间从堆中分配。在 Object Pascal 中,所有对象(类类型的)都被建立在内存的堆空间上,而非栈上。因此在创建对象时,其构造函数不会被编译器自动调用,也没有 C++中所谓的“默认构造函数”。调用构造函数来创建对象以及调用析构函数来消灭对象都是程序员的职责。析构函数都需要加 override声明。与构造函数类似,如果在类中没有特殊的资源需要被释放,也可以不定义析构函数,TObject 同样定义了一个空的析构函数。
在析构对象的时候,应该调用对象的 Free()方法而不是直接调用 Destroy()。 MyFamilyObject.Free(); 这是因为,在TObject的 Free()方法中会判断对象本身是否为 nil,如果不为 nil 则调用对象的 Destroy(),以增加安全性。既然有这样更安全的做法,当然没有理由不这么做了。
注意:永远不要直接调用对象的 Destroy(),而应该是 Free()。
对象的大小只取决于其拥有的数据成员。


类级别的封装是最常见的封装形式。
每个 Object Pascal 的类,有四种访问级别:private、protected、public、published。其
中,public 的成员可以被外界的所有客户代码直接访问;published 和 public 差不多,区别
仅在于 published 的成员可以被 Delphi 开发环境的 Object Inspector 所显示,因此一般将属
性或事件声明于 published 段;private 成员为类的私有性质,仅有类本身和友元可访问;
protected 成员基本与 private 类似,区别在于 protected 可以被该类的所有派生类访问。

 

单元级别的封装包含的含义有:
1.在一个 Unit 中声明的多个类,互为友元类。
2.在一个 Unit的 interface 部分声明的变量为全局变量,其他 Unit 可见。
3.在一个 Unit 的 implementation 部分声明的变量为该 unit 的局部变量,只在该 Unit可见。
4.每个 Unit可有单独的初始化段(initialization)和反初始化段(finalization),可在编译器支持下自动进行 Unit 级别的初始化和反初始化。

posted on 2008-08-07 17:38  黑白程式  阅读(198)  评论(0)    收藏  举报