提升shared_ptr工厂功能

时间:2010-11-29 22:30:37

标签: c++ boost shared-ptr

我对指针世界很新,并且在我的代码中遇到了问题。我有一个吐出shared_ptr的工厂类。 “Entity”是从此方法创建的任何类型的shared_ptr的基类。

如果我覆盖get_entity方法中的指针,一切似乎都有效。如果我覆盖get_pointer方法中的指针则不会。

// 
// typedef boost::shared_ptr<Entity> EntityPtr;

Entity::EntityPtr EntityFactory::get_entity(int type) {

    // My default pointer if everything else falls through
    Entity::EntityPtr e = boost::make_shared<Entity>(type);
    std::cout << e->get_type() << std::endl; // Entity

    switch (type) {
    case 1:
        // This works
        e = boost::make_shared<TextEntity>(type);
        std::cout << e->get_type() << std::endl; // TextEntity
        break;
    case 2:
        // This doesn't work
        get_pointer(e, type);
        std::cout << e->get_type() << std::endl; // Entity
        break;
    }

    return e;

}

// This function can (possibly) overwrite the passed-in pointer
void EntityFactory::get_pointer(Entity::EntityPtr e, int type) {

    // ...

    e = boost::make_shared<TextEntity>(type);

    // ...
}

我将“e”传递给get_pointer方法的原因是因为我并不总是需要修改指针。在某些情况下,get_pointer完成而根本不修改指针。

我希望有人可以帮助我解释一下我在这里做错了什么。谢谢!

1 个答案:

答案 0 :(得分:0)

由于你将整数传递给make_shared,我对你尝试做的wtf非常困惑。

您可以通过在Entity::EntityPtr中接受对get_pointer的引用来解决您的问题。