今天在网上看了一篇博客,关于Qt的底层机制的,做Qt开发不久,原来也就是一直调用上层的做做界面。觉得Qt对象的数据成员的储存的方式,思想还是很值得借鉴。
首先,Qt的数据成员不是像我们一般的那样:每个都罗列在类的private中,它是把它定义成一个数据结构体的指针。
其次,都知道Qt的类都是从QObject派生,它的数据成员中有一个QObjectData*,这是一个虚基类指针,而QObject的一个构造函数参数是QObjectPrivate*,QObjectPrivate这个类是从QObjectData派生的.
再次,比如QWidget类是从QObject派生而来,他应该有自己的数据类,这个类就是QWidgetPrivate,他是从QObjectPrivate继承的,所以QObject中定义的d_ptr指针就可以转换为QWidgetPrivate类型的指针。
其中的转化机制主要是通过宏来实现的
这种数据的管理机制,一脉相承,而又各自独立,很好很强大!