实体删除无法正常工作

时间:2018-07-10 15:49:55

标签: c++ entity

我正在尝试编写一个实体组件系统,该系统将允许我使用管理器类随意创建和删除实体类,而不必在完成后过多担心内存管理。

它看起来像这样:

class Entity {
    int testInt = 0;
public:
    Test(int a) {
        testInt = a;
    }

    int getTestInt() { return testInt; }
}


class EntityManager {
public:
    inline static std::vector< std::unique_ptr<Entity> > EntityVector = {};

    static Entity& createEntity(int a) {
        auto* e = new Entity(a);
        EntityVector.push_back(std::unique_ptr<Entity>(e));
        return *e;
    }

    // should delete an entity through erasing its unique_ptr
    // by comparing the testInt value to the given argument
    static void destroyEntity(int a) {
    EntityVector.erase(
                std::remove_if(
                        EntityVector.begin(),
                        EntityVector.end(),
                        [a] (const std::unique_ptr<Entity> &currentEntity) -> bool {
                            return currentEntity->getTestInt() == a;
                        }),
                EntityVector.end()
        );
    }

};

整个问题更大,但这部分产生了问题。

现在,当我使用Entity创建EntityManager::createEntity()时,一切正常,但是当我去手动删除Entity或通过{{1 }}我编写的函数似乎并没有被删除,尽管据我所知,删除delete会调用它所指向的对象的析构函数。但是之后,我仍然可以访问destroyEntity。这是一个示例:

unique_ptr

哪个输出

Entity

我的问题是:为什么删除int a = 5; Entity testEntity = TestManager::createEntity(a); // works as expected, outputs 5 std::cout << testEntity.getTestInt() << std::endl; // does not appear to properly destroy the entity TestManager::destroyEntity(5); // same thing happens with a passed as an argument // still prints 5 std::cout << testEntity.getTest() << std::endl; 并没有真正删除它指向的5 5

0 个答案:

没有答案