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

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