前向声明还是include? - 木东驿站 - Powered by MoodBlog

CONTENT

前向声明还是include?

在c++开发中,如果我们有个类A要用到类B,类B的定义在其它文件中,通常情况下我们需要这样做:

#include "B.h"

这样当前文件就知道了类B的结构,我们就可以在类A中使用类B的,但是有些情况下,我们不需要知道类B的结构,只需要告知编译器,类B是一个确实存在的类型,这样可以减少编译工作量。

什么时候出现这种情况呢?

在我们定义类A时,很多方法都是类外定义,所以在头文件中不需要编写方法细节,这样我们就无需知道类B的结构(毕竟在具体方法中才需要调用类B的方法)。

前向声明

在程序中引入了类类型的B.在声明之后,定义之前,类B是一个不完全类型(incompete type),即已知B是一个类型,但不知道包含哪些成员.不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针引用,用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数,以及用于模板参数。

注意事项

1.不要定义前向声明的对象,因为这样就意味着要调用其构造方法,很明显是无法调用的。

2.即使定义的是指针,也不要在析构函数delete,因为delete会先调用其析构方法。也就是说你这个指针指向的内存不能是在当前类申请的,当前类只是使用该指针,指针指向的内存由其它类管理。

3.如果前向声明的类型要用做参数,不能出现在函数定义中,只能用于声明。

使用方法

class B;
class A
{
    public:
        void runFunc(B);
    private:
        B& b1;
        B* b2;
        Vector<B> Bvec;
};


个快快 2018年10月23日 天气 晴

REMARKS

© 2018 MoodBlog 0.2 个快快 作品 | 参考主题: mathilda by fuzzz. | 鲁ICP备16047814号