其实这是一个贴的延伸:原帖:
最近看《深入浅出mfc》,其中说到类型识别技术,有个疑问:
是这样的,他为了登记类的信息,声明了一个结构CRuntimeClass,然后用宏把这个结构放到类里面去,但是既然这里面的类是继承关系的,为什么每一个子类还要再用这个宏声明一次呢?假如是可以继承的,那空间利用的就很糟糕了?子类拥有越来越多不必要的、父类对应的CRuntimeClass结构,这效率好像不高哦?后来这个帖子也有些朋友给了答复,不过都似懂非懂,于是自己也写了好几个小程序试了下,有几个发现,觉得还是挺有用的:1.子类还会有父类的CRuntimeClass结构,在书上的例子试出的结果是,好几次继承之后的子类CWinApp,除了自身的结构 ClassCWinApp外,还有父类的结构ClassCWinThread,再父类的结构ClassCCmdTarget,乃至根本类的结构 ClassCObject,也就是说,子类还是携带了父类的结构。2.有了第一个结论,我就想,那岂不有很多多余的空间浪费了??于是用sizeof()查看他们的大小,发现,宏所引入的这些结构,并没有让他们的大小发生任何变化,就是说,这些结构并没占空间,即使里面的数据很多。而假如我不用宏,这些结构会占有空间的。3.新的疑问:为什么宏有这样的效果,貌似这些结构对象真实存在,可以使用,为什么却偏偏不占空间?希望大家继续探讨一下4.更新的疑问:其实,为什么不可以在一开始,就把这个CRuntimeClass结构作为基类CObject的一个结构成员,统一叫 runTimeClass好了,然后一直继承下去,而且这个结构还是可以起到本来的作用,能构成型录网络,更重要的是,省空间,我觉得这样行得通,不知道大家觉得怎样?
最近看《深入浅出mfc》,其中说到类型识别技术,有个疑问:
是这样的,他为了登记类的信息,声明了一个结构CRuntimeClass,然后用宏把这个结构放到类里面去,但是既然这里面的类是继承关系的,为什么每一个子类还要再用这个宏声明一次呢?假如是可以继承的,那空间利用的就很糟糕了?子类拥有越来越多不必要的、父类对应的CRuntimeClass结构,这效率好像不高哦?后来这个帖子也有些朋友给了答复,不过都似懂非懂,于是自己也写了好几个小程序试了下,有几个发现,觉得还是挺有用的:1.子类还会有父类的CRuntimeClass结构,在书上的例子试出的结果是,好几次继承之后的子类CWinApp,除了自身的结构 ClassCWinApp外,还有父类的结构ClassCWinThread,再父类的结构ClassCCmdTarget,乃至根本类的结构 ClassCObject,也就是说,子类还是携带了父类的结构。2.有了第一个结论,我就想,那岂不有很多多余的空间浪费了??于是用sizeof()查看他们的大小,发现,宏所引入的这些结构,并没有让他们的大小发生任何变化,就是说,这些结构并没占空间,即使里面的数据很多。而假如我不用宏,这些结构会占有空间的。3.新的疑问:为什么宏有这样的效果,貌似这些结构对象真实存在,可以使用,为什么却偏偏不占空间?希望大家继续探讨一下4.更新的疑问:其实,为什么不可以在一开始,就把这个CRuntimeClass结构作为基类CObject的一个结构成员,统一叫 runTimeClass好了,然后一直继承下去,而且这个结构还是可以起到本来的作用,能构成型录网络,更重要的是,省空间,我觉得这样行得通,不知道大家觉得怎样?
解决方案 »
- error C2061: 语法错误 : 标识符“CLogicalPoint”
- 急!!!怎么发送tvn_selchanged消息
- 请教:MFC下,数据采集 如何实现边显示边存储功能 在线求解
- XP系统下一点setup.exe就重启,为什么??
- 按钮的图标、位图属性是什么意思?
- 如何在多线程函数中往View上绘图?
- 有办法让VC6.0也能象VS2008那样,把拷贝的内容自动缩进吗?
- 请问怎么在DLL中取得DLL自身的文件名?(分在里面的连接里)
- VC下如何播放MP4等视频文件
- 一个见简单问题,高分送上
- 初学网络编程,几个问题,大家看看
- 用ZwCreateFile直接写扇区导致蓝屏,大家帮忙给看一下……
我能想象lz脑子现在一定充满了问号和感叹号。嘻嘻。
侯爷爷看了第4条一定哭了。