免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2342 | 回复: 1
打印 上一主题 下一主题

纯虚析构函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-08 17:21 |只看该作者 |倒序浏览
纯虚析构函数
  1. 1 class CastStrategy  

  2. 2 {  

  3. 3 public:  

  4. 4     CastStrategy();  

  5. 5   

  6. 6     virtual ~CastStrategy();  

  7. 7   

  8. 8     virtual bool CastSpell(Caster *lpCaster, uint64_t ullTarget) = 0;  

  9. 9 };

  10. 会报链接错误!

  11. view sourceprint?1 class CastStrategy  

  12. 2 {  

  13. 3 public:  

  14. 4     CastStrategy();  

  15. 5   

  16. 6     //virtual ~CastStrategy();  

  17. 7   

  18. 8     virtual bool CastSpell(Caster *lpCaster, uint64_t ullTarget) = 0;  

  19. 9 };
复制代码
会出现:
  1. 1 CastStrategy.h:17: warning: ‘class CastStrategy’ has virtual functions but non-virtual destructor  

  2. 2 CastStrategy.h:27: warning: ‘class EnemyStrategy’ has virtual functions but non-virtual destructor
复制代码
这个类有一个纯虚函数,所以它是抽象的,而且它有一个虚析构函数,所以不会产生析构函数问题。但这里还有一件事:必须提供纯虚析构函数的定义:

awov::~awov() {}           // 纯虚析构函数的定义

这个定义是必需的,因为虚析构函数工作的方式是:最底层的派生类的析构函数最先被调用,然后各个基类的析构函数被调用。这就是说,即使是抽象类,编译器也要产生对~awov的调用,所以要保证为它提供函数体。如果不这么做,链接器就会检测出来,最后还是得回去把它添上。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
2 [报告]
发表于 2011-06-08 18:14 |只看该作者
純虛的要實現体。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP