每当类声明仅使用另一个类作为指针时,使用类前向声明而不是包含头文件是否有意义,以便先发制人地避免循环依赖的问题?所以,而不是:
//file C.h
#include "A.h"
#include "B.h"
class C{
A* a;
B b;
...
};
Run Code Online (Sandbox Code Playgroud)
改为:
//file C.h
#include "B.h"
class A;
class C{
A* a;
B b;
...
};
//file C.cpp
#include "C.h"
#include "A.h"
...
Run Code Online (Sandbox Code Playgroud)
有什么理由不尽可能不这样做吗?
我有一个B类,我想把成员称为A类.所以:
1.
//A.h
class B;
class A
{
private:
B* m_p;
};
//a.cpp
#include "B.h"
Run Code Online (Sandbox Code Playgroud)
2.
// A.h
#include "B.h"
class A
{
private:
B * impl_;
};
Run Code Online (Sandbox Code Playgroud)
当一个没有太多依赖性的小项目涉及时,这两种方式是否更好?
我想知道在可能的情况下在所有地方使用前向声明是否有任何缺点.这是我的标题只包含声明.
据我所知,使用前向声明可加快编译时间,但我不知道有什么缺点.
啊:
Class A
{
};
Run Code Online (Sandbox Code Playgroud)
BH:
// Should I use and include "a.h" in the cpp file (e.g., a.cpp)
Class A;
Class B
{
doSomething(A *a);
A *myA;
};
Run Code Online (Sandbox Code Playgroud)
或者它是否更好用
BH:
#include "a.h"
Class B
{
doSomething(A *a);
A *myA;
};
Run Code Online (Sandbox Code Playgroud)