首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

初学者想请教一下在BCB中动态生成控件时this,null.application有什么区别呢

2012-05-05 
菜鸟想请问一下在BCB中动态生成控件时this,null.application有什么区别呢?在BCB中用new动态生成控件时,比

菜鸟想请问一下在BCB中动态生成控件时this,null.application有什么区别呢?
在BCB中用new动态生成控件时,比如生成一个button,有
TButton * button1=new TButton(this)
TButton * button1=new TButton(Null)
TButton * button1=new TButton(Application)
这三者有什么区别呢?括号里面代表什么意思呢?


还有,在用delete销毁控件时,
我看到有人在delete button1后,又加了一句,button1=Null,这代表什么意思呢?

撒分啦撒分啦

[解决办法]
TButton* button1= new TButton(x);
括号内的x,表达 button1 将缔属于 x。
当x 消失时,button1 自动消失。树倒猢狲散了。
因此,一般用不着delete button1;

也因此,一般不会有new TButton(Null)。
[解决办法]
TButton的构造函数有一个参数就是TComponent *AOwner,代表了Button组件的所有者(所有者不等于父窗口),如果指定了一个有效的Owner,那么这个Owner可以负责Button组件的释放工作。

TButton *button1 = new TButton(this)
这行代码,只能在某个类的成员函数中才有意义,this代表了当前类的对象本身,很多时候,我们都是在窗体类的成员函数中使用这个语句来动态创建组件,那么这个this就代表当前的Form对象,这是一个有效的Owner,所以,可以不手工添加delete button1这样的代码来释放,Form会负责。

TButton *button1 = new TButton(Null)
这条语句指定Button的Owner为NULL,那么需要自己考虑释放的问题。

TButton *button1 = new TButton(Application)
这条语句指定Button的Owner为Application,而Application是一个全局的TComponent对象,也是有效的Owner,可以负责button1的释放。

关于delete某个对象后再将其置为NULL:判断某对象是否有效时,通常用 if (对象 != NULL) 或 if (对象) 这样的语句,所以,delete后置为NULL,也就成了一种风格。

热点排行