SWT中资源基类Resouce

本文介绍了SWT图形库中资源管理的基本原则,强调了颜色、字体和图片等资源必须显式释放的重要性。此外还讨论了控件层级之间的资源释放机制。

This class is the abstract superclass of all graphics resource objects. 
Resources created by the application must be disposed.
  由应用程序创建的资源在使用完后必须由程序员自己释放它。

 

 

SWT资源释放的方式

1.像颜色,字体,图片等一类资源,必须显式释放掉。需要注意的是
若字体或颜色是由系统产生的,则不需要程序员手动释放。
如获取颜色
 display.getSystemFont();
display.getSystemColor(id);
display.getSystemImage(id)    
等。
2.父控件被dispose时,也会dispose子控件
如shell释放时,会释放掉
shell中的composite。
composite释放时会释放掉其下的子composte和子控件。

在C++里,虚基类是实现虚继承机制的关键概念。虚继承的目的是让某个类做出声明,承诺愿意共享它的基类,这个被共享的基类就被称作虚基类,例如在类继承关系中,若类A被声明为虚基类,那么不论它在继承体系中出现多少次,在派生类里都仅包含一份虚基类的成员[^1]。 以如下代码为例: ```cpp class A {}; class B: virtual public A {}; class C: virtual public A {}; class D: public B, public C {}; ``` 在这个例子中,类A就是虚基类,类B和类C通过虚继承的方式继承自类A,类D又同时继承自类B和类C,最终类D中只会有一份类A的成员[^5]。 虚基类的出现主要是为了解决多继承中的菱形继承问题。在非虚基类的多继承情况下,会存在数据冗余和二义性问题。例如: ```cpp #include <iostream> using namespace std; class Base { public: int value; }; class Derived1 : public Base { }; class Derived2 : public Base { }; class Final : public Derived1, public Derived2 { }; int main() { Final f; f.Derived1::value = 10; // 访问 Derived1 的 Base f.Derived2::value = 20; // 访问 Derived2 的 Base cout << f.Derived1::value << endl; // 输出 10 cout << f.Derived2::value << endl; // 输出 20 } ``` 在上述代码里,类Final同时继承自类Derived1和类Derived2,而类Derived1和类Derived2又都继承自类Base,这就导致类Final中存在两份类Base的成员,需要通过作用域解析运算符来明确访问哪一份成员,存在数据冗余和访问二义性问题。而使用虚基类就能避免这种情况,保证派生类中只有一份虚基类的成员[^4]。 在构造对象时,若同一层次中同时包含虚基类和非虚基类,应先调用虚基类的构造函数,再调用非虚基类的构造函数,最后调用派生类构造函数。例如: ```cpp class Y {}; class Z {}; class X: public Y, virtual public Z { //… }; X one; ``` 定义类X的对象one后,调用次序为:先调用Z(),再调用Y(),最后调用X() [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值