上次贴出新书的第一章,出乎我的意料,反响热烈,得到许多网友的支持。
今天完成了第二章的草稿的撰写,在此节选一小段文字,希望继续得到大家的支持,指正。
当然,节选的量是非常少的(否则出版社也不答应,呵呵),不过,一斑可窥全豹,之后我会在每一章完成后,节选少量文字贴在这里。
信箱 nicrosoft@sunistudio.com
个人主页 http://www.sunistudio.com/nicrosoft/
东日制作室 http://www.sunistudio.com
===========================================================
在Object Pascal中,所有对象都被建立在内存的堆空间上,而非栈上,因此构造函数不会如同C++那样被编译器自动调用。构造对象和析构对象都是程序员的职责。
构造对象首先要为对象分配内存,这个步骤在Object Pascal中是由编译器支持完成的--即所谓的"编译器魔法(Compile Magic)",此过程程序员不必参与;接着要初始化对象的数据成员,编译器会负责"清零",但如果有特殊的赋值,可以在构造函数中完成;对象在被析构的时侯需要释放所申请的资源(非对象本身所占用内存),这些工作是析构函数的职责;对象本身所占内存的回收,同样由"编译器魔法"完成。
对象内存的分配及回收
编译器在为对象分配内存时,所提供的支持就是在调用构造函数之前插入这几行汇编代码:
test dl, dl
jz +$08
add esp, -$10
call @ClassCreate // 注意这行代码
以上代码的最后一行代码调用的是system.pas文件的第8949行的_ClassCr