当我编写C ++代码时,我经常尝试将头文件的数量限制为#include
,因为它会缩短编译时间,并且在程序的一部分更改时也可以防止不必要的编译单元重新编译。 / p>
另一方面,我也尝试避免自己管理内存,而我更喜欢使用Object x;
代替std::uniq_ptr<Object> x(new Object)
或Object *x
。但这样做意味着我知道Object
的定义,并在我的标题中包含相应的#include
,如下例所示:
// Resources.h
#include <...> /* Include the header files needed to build an instance of Resources.
There quite be quite a lot of them, like some templated libraries, stuff that calls
upon some OpenGL functions, and so on. */
class Resources {
Rectangle rect;
Matrix<double> mat;
ImagePNG img;
public:
Resources(... /* give some parameters to initialize the resources */);
}
现在在程序的另一部分我有这样的事情:
// Application.h
#include "Resources.h" // <-- I want to get rid of this line
class Application {
Resources res;
public:
Application(... /* some parameters */);
}
因此,正如您所看到的,我想删除行#include "Resources.h
。我知道前进声明,我想我可以这样做:
// Application.h
class Resources;
class Application {
Resources *res;
public:
Application(... /* some parameters */);
}
但现在我的问题是如何管理内存?每次我想使用指针而不是整个对象时,我真的不想被迫编写自己的自定义析构函数/复制构造函数/赋值运算符。如果我复制Application
的实例,我也希望创建res
的完整副本(因此std::shared_ptr<Resources>
不会这样做:这实际上是对象组合)
所以我想知道是否有人可以在这种情况下给出一些建议?