C++接口的设计——析构函数

接口不应该有实体函数,即接口的所有函数都应该是公共的纯虚函数。不过析构函数应该不应该是纯虚函数呢?如果是非纯虚的虚函数,那函数体要写什么呢?答案是什么都不写,内容为空的函数很不简洁,不爽。那就设置成纯虚函数,很遗憾,编译通不过,因为子类会调用父类的析构函数,父类析构函数指针不应该为空。那就考虑设置成普通函数吧,还可以省去声明,因为C++默认实现析构函数!一个显而易见的问题,当delete接口时只是调用了接口的析构函数,并不能正确地调用子类的析构函数。由此看来,还是应该采用第一种的非纯虚的虚函数形式。但是,仔细想一想,我们是否需要delete一个接口,我们真的需要delete一个接口吗?这个答案并不是那么显而易见。一个接口对象最开始产生的地方必定是根据具体的类名产生的,如果我们遵循一个原则:谁产生,谁释放。这样在对象产生的地方不以接口指针存放,删除的时候也当然不以接口指针删除,析构可以正常。而其它使用对象的地方,可以以接口指针引用。这样做的好处是使对象指针的管理清晰了,如果当前模块引用的是接口指针或者说接口指针不包含虚析构函数,我们就不应该delete此指针。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值