Неправильно ли всегда использовать тип данных моего объекта-члена?Должны ли все объекты класса быть ссылкой?
После прочтения этого вопроса question about avoiding #include Я пытался избежать использования #include в моем текущем проекте на C++ и всегда пересылать объявления своих типов данных.
Вот пример фрагмента кода из моего проекта. В заголовке у меня есть EnemyBuilder & m_builder; а затем инициализирую его в источнике.
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;
}
Вы не понимаете ссылочный тип (например, «EnemyBuilder &») и прямую ссылку (например, «класс Enemy»). Совершенно разные вещи –
У вашего кода есть главный недостаток: 'm_builder (EnemyBuilder()) создает ссылку на временную ... – kfsone
Какую проблему вы пытаетесь решить? –