最近用delphi,发现一个问题,不知道我说的对不,delphi的对象名只不过是个指针,还不是常指针,可以随便改所以我有两个问题:
1.delphi的变量名是否只是个指针???
2.delphi的对象是不是不可能写在栈中,成为自动变量自动释放????
我一直想用一个引用变量来引用一个对象,发现不知道该怎么办,delphi貌似没有定义引用变量,经过多番尝试,居然可以定义一个任意类型的指针就能引用任何对象,比如一个tbutton型指针p,只需要执行,p:=tbutton(richedit1);然后就可以trichedit(p).来操作richedit1对象。用一个按钮类型的指针去操作文本编辑对象这也太离奇了。
所以我只能得出个猜测,delphi根本就没有C++意义中的对象名,他只有一个指向该对象内存的指针,就是类似于C++中用new给指针分配内存一样,这么搞可能也不能自动释放对象,只是把指针给释放了(这个我没研究过,至少C++中的new不可以),是不是在delphi里每次在子函数创建一个临时对象就必须在跳出函数自己释放????
C++里的对象在子函数里默认的可是自动变量,写在栈中,肯定会自动释放
1.delphi的变量名是否只是个指针???
2.delphi的对象是不是不可能写在栈中,成为自动变量自动释放????
我一直想用一个引用变量来引用一个对象,发现不知道该怎么办,delphi貌似没有定义引用变量,经过多番尝试,居然可以定义一个任意类型的指针就能引用任何对象,比如一个tbutton型指针p,只需要执行,p:=tbutton(richedit1);然后就可以trichedit(p).来操作richedit1对象。用一个按钮类型的指针去操作文本编辑对象这也太离奇了。
所以我只能得出个猜测,delphi根本就没有C++意义中的对象名,他只有一个指向该对象内存的指针,就是类似于C++中用new给指针分配内存一样,这么搞可能也不能自动释放对象,只是把指针给释放了(这个我没研究过,至少C++中的new不可以),是不是在delphi里每次在子函数创建一个临时对象就必须在跳出函数自己释放????
C++里的对象在子函数里默认的可是自动变量,写在栈中,肯定会自动释放
2.delphi不能在栈上创建对象。创建对象只能调用构造函数Create创建,然后自己通过free来释放。如果想实现自动释放只能用接口,用TInterfacedObject实现接口可以有自动释放的效果
这两种语言的对象概念不能完全对应.
这个不一定,基本类型的变量如何是指针?对象名可以理解为指针(到d7为止,后续版本的delphi情况不知)
2.delphi的对象是不是不可能写在栈中,成为自动变量自动释放????
到d7为止不行,后续版本的delphi情况不知指针只是存储了一个内存的首地址,指针类型的约束是对编译器的,对程序员实际没有约束,想怎么用就怎么用,因为内存中没有对象没有类型没有类什么也没有,只有地址,c++中一样可以用int指针去操作字符串或类实例,但这样是有隐患的,你自己必须知道该怎么操作内存,尤其是两种指针分配的内存大小不一样的时候。d和c++这种不同可以说各有好处把,在d中实例永远是指针,所以传递的时候任何情况不会发生对象复制的情况,你要复制就要显示创建一个新的对象进行复制,而c++中允许直接传递对象,但对象复制和副本的重构造会使用大量的资源,使用不当会有比较大的影响。