Is it bad practice to always make my object member's data type a reference?
After reading this question about avoiding #include I've have been trying to avoid using #include in my current C++ project and always forward declare my data types.
Here is an example code snippet from my project. In the header I have EnemyBuilder &m_builder; and then I initialize it in the source.
EnemyFactory.h
#include <string>
#ifndef ENEMYFACTORY
#define ENEMYFACTORY
class World;
class Enemy;
class EnemyBuilder;
class EnemyFactory
{
private:
EnemyBuilder &m_builder;
World &m_world;
public:
EnemyFactory(World &world);
Enemy* produce(std::string type);
};
#endif
EnemyFactory.cpp
#include "EnemyFactory.h"
#include "EnemyBuilder.h"
#include "World.h"
#include "Enemy.h"
EnemyFactory::EnemyFactory(World &world) :
m_world(world), m_builder(EnemyBuilder())
{
}
Enemy* EnemyFactory::produce(std::string type)
{
Enemy *product = new Enemy(m_world);
if (type == "basic")
{
product->setSpeed(5000.0f);
}
return product;
}