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

为何ATL的实现类都要声明_declspec(novtable)

2013-09-06 
为什么ATL的实现类都要声明__declspec(novtable)?class ATL_NO_VTABLE CFun :.....ATL工程创建的实现类都

为什么ATL的实现类都要声明__declspec(novtable)?

class ATL_NO_VTABLE CFun :.....


ATL工程创建的实现类都是上面这样的形式。奇怪了,既然ATL类的函数都是virtual的,为什么类型声明还要弄成novtable的呢? 这样做到底有什么含义和用途?

[解决办法]
atl类本身是没有IUnkonwn接口的实现,也无法new,虚表没啥意义,而且多占了点内存。
跟virtual不冲突
[解决办法]
__declspec (novtable)是操作虚表的关键字
曾经写过一个博客:http://blog.csdn.net/daisy__ben/article/details/8124789大概看看具体有几个地方不对。
1> 被这个关键字指定的类,虚表没有初始化,所以不能直接实例化(new),ATL框架部分可能是想限制在代码中直接使用new出类的实例(用其它的方法)。
2> 继承多个接口的组件,返回给客户的每个接口的指针都是相同(自己实验一下?应该是这样的)。普通类的多重继承内存布局可能不同于组件的虚表,多亏这个关键字,具体说清楚又几百字可以写博客了。

热点排行