当前向声明不够的两种情况

主要观点:分享了两个需包含头文件而非仅使用前置声明的案例,一个是遗漏析构函数,一个是协变返回类型相关情况;强调了在某些情况下仅前置声明可能不够,需包含完整头文件定义。
关键信息:

  • 第一个案例中,Foo类使用Bar类但未完整包含bar.h头文件,导致编译错误,后发现是遗漏了析构函数声明与定义;同时指出获取Bar对象需包含bar.h,仅传递引用或Foo本身则无需。
  • 第二个案例中,在协变返回类型的实现中,虽SUVCar的派生类可协变返回,但仅前置声明CarSUV在工厂类中会导致编译失败,需包含完整的SUV.h头文件。
    重要细节:
  • 第一个案例中,库构建时暴露的头文件没问题,但实例化Foo的库编译报错,后通过在foo.h或使用Foo的客户端包含bar.h解决,最终在foo.h中添加析构函数声明与定义解决问题。
  • 第二个案例中,工厂类与CarSUV类分别在不同头文件和实现文件中,仅前置声明会使编译器无法推断类关系导致编译失败,需包含完整头文件。
阅读 9
0 条评论