Lors de la création d'une classe composée d'autres classes, est-il utile de réduire les dépendances (et donc de compiler les temps) en utilisant des pointeurs plutôt que des valeurs?Les pointeurs doivent-ils être utilisés pour réduire les dépendances d'en-tête?
Par exemple, la valeur ci-dessous utilise des valeurs.
// 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) {}
Cependant, la version modifiée ci-dessous utilise des pointeurs.
// 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)) {}
J'ai lu un message qui recommande une telle approche, mais si vous avez un grand nombre de pointeurs, il y aura un grand nombre de new
appels, ce qui je crois serait lente.
"vaut-il la peine de réduire les dépendances (et donc de compiler les temps) en utilisant des pointeurs plutôt que des valeurs?" - Je ne vois pas comment utiliser les pointeurs "réduit les dépendances" - ni comment cela a une relation avec le temps de compilation. – Dai
Il n'y a rien à propos d'un pointeur qui nécessite un appel 'new'. Je peux écrire un tas de code, avec des pointeurs partout, et pas un seul appel 'new'. –
@Dai: Vous pouvez retransmettre le type de pointee plutôt que "#include" l'en-tête complet dans lequel le type est entièrement défini. –