C ++对象组合和单独编译

时间:2014-08-06 13:40:03

标签: c++ c++11 compilation header-files composition

当我编写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>不会这样做:这实际上是对象组合)

所以我想知道是否有人可以在这种情况下给出一些建议?

0 个答案:

没有答案