【发布时间】:2016-06-30 06:23:19
【问题描述】:
当创建一个由其他类组成的类时,是否值得通过使用指针而不是值来减少依赖关系(从而减少编译时间)?
例如,下面使用值。
// ThingId.hpp
class ThingId
{
// ...
};
// Thing.hpp
#include "ThingId.hpp"
class Thing
{
public:
Thing(const ThingId& thingId);
private:
ThingId thingId_;
};
// Thing.cpp
#include "Thing.hpp"
Thing::Thing(const ThingId& thingId) :
thingId_(thingId) {}
但是,下面的修改版本使用了指针。
// ThingId.hpp
class ThingId
{
// ...
};
// Thing.hpp
class ThingId;
class Thing
{
public:
Thing(const ThingId& thingId);
private:
ThingId* thingId_;
};
// Thing.cpp
#include "ThingId.hpp"
#include "Thing.hpp"
Thing::Thing(const ThingId& thingId) :
thingId_(new ThingId(thingId)) {}
我读过一篇推荐这种方法的帖子,但是如果你有大量的指针,就会有大量的new 调用,我想这会很慢。
【问题讨论】:
-
“是否值得通过使用指针而不是值来减少依赖关系(从而减少编译时间)?” - 我不明白使用指针如何“减少依赖” - 也不知道它与编译时间有什么关系。
-
没有关于需要调用
new的指针。我可以写一堆代码,到处都是指针,而不是一个new调用。 -
@Dai:您可以转发声明指针类型,而不是
#includeing 完全定义类型的整个标头。 -
@SamVarshavchik:问题中的代码不是指向自动存储持续时间变量的指针是安全的代码示例。有终身考虑。 OP 通常是正确的,这种方法将不可避免地导致更多(可能是过多的)动态分配。
-
@Dai 如果不发布实现,显然使用指针可以减少类实现更改的编译时间依赖性;这反过来又禁止使用普通对象(使用代码不知道它们的大小和布局)。这很简单。
标签: c++ pointers circular-dependency forward-declaration