我工作的一个架构,我需要有一个实体在不同的表像:正确使用智能指针无泄漏
- 渲染 - >组件(SpriteComponent)的名单
- Collisioner - >组件列表(PhysicComponent)
我认为智能指针是管理所有这些引用的最佳解决方案,所以我开始学习它,但我有一些问题,我SOR河畔,如果我使用它们正确。
吃茶:
我有一个抽象类:IEntity
class IEntity {
public:
IEntity(World& world);
private:
World* world;
public:
std::tr1::weak_ptr<IEntity> weak_this;
};
typedef std::tr1::shared_ptr<IEntity> Entity;
而且我得到了在一个EntityManager创建实体的方法:
Entity EntityManager::createEntity() {
Entity entity(new IEntity(*this->world));
entity->weak_this = entity;
this->entityList.add(&entity);
return entity;
}
在我的EntityManager类中,我有一个“实体”(Of shared_ptr)向量:
std::vector<Entity> entityList;
1 - 我需要在我的程序(参数,...)中的任何地方使用类型“实体”吗?
2 - 如果我有这样的:
class IComponent {
public:
IComponent();
};
typedef std::tr1::shared_ptr<IComponent*> Component;
而且我有一个对象是这样的:
class SpriteComponent : public Component {
public:
SpriteComponent();
int texture;
};
这是很好的从一个shared_ptr继承?这对我来说看起来很奇怪,但那项工作。
3 - 我试图创建使用10000个实体此:
Entity entity = world.getEntityManager().createEntity();
到实体引用是推在我的“实体”的载体,如果我真正理解智能指针,一个清除矢量将删除所有实体(因为没有其他参考)。但是当我用cXode泄漏分析器查看时,我可以看到内存在未删除Entity的情况下正在增长。所以我只是试图创建实体与插入我的载体,我没有泄漏,为什么?哪里有问题 ?吴。
4 - 如果我在游戏中使用smart_ptr,是否有一些性能问题? (我正在使用参考):
感谢您的时间!