一般来说, 只有在自己的类中将某个类的对象作为数据成员使用时, 或者需要继承某个类时, 才应该包含那个类的头文件. 传统上来说, 前置声明可以在下列情况下使用:
不需要知道类的大小....如果包含的类要作为成员变量或打算从包含类派生子类, 那么编译器需要知道类的大小.
没有引用类的任何成员方法. 引用类的成员方法需要知道方法原型, 即参数和返回值类型.
没有引用类的任何成员变量....不过, 本身就不应该把类的成员变量暴露....前置声明能够节省不必要的重新编译时间. #include使代码因为头文件中无关的改动而被重新编译多次.
缺点
前置声明隐藏关系, 头文件改动时, 用户代码会跳过必要的重新编译过程....f(void*), 因为前置声明会隐藏类的依赖关系.