主要观点:分享了两个需包含头文件而非仅使用前置声明的案例,一个是遗漏析构函数,一个是协变返回类型相关情况;强调了在某些情况下仅前置声明可能不够,需包含完整头文件定义。
关键信息:
- 第一个案例中,
Foo
类使用Bar
类但未完整包含bar.h
头文件,导致编译错误,后发现是遗漏了析构函数声明与定义;同时指出获取Bar
对象需包含bar.h
,仅传递引用或Foo
本身则无需。 - 第二个案例中,在协变返回类型的实现中,虽
SUV
是Car
的派生类可协变返回,但仅前置声明Car
和SUV
在工厂类中会导致编译失败,需包含完整的SUV.h
头文件。
重要细节: - 第一个案例中,库构建时暴露的头文件没问题,但实例化
Foo
的库编译报错,后通过在foo.h
或使用Foo
的客户端包含bar.h
解决,最终在foo.h
中添加析构函数声明与定义解决问题。 - 第二个案例中,工厂类与
Car
、SUV
类分别在不同头文件和实现文件中,仅前置声明会使编译器无法推断类关系导致编译失败,需包含完整头文件。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。