boost shared_ptr 工厂函数

发布于 2024-10-04 16:01:51 字数 1208 浏览 4 评论 0原文

我对指针的世界还很陌生,并且在我的代码中遇到了问题。我有一个工厂类可以吐出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 完成时根本不修改指针。

我希望有人能帮助阐明我在这里做错了什么。谢谢!

I'm pretty new to the world of pointers and have run into a problem in my code. I have a factory class that spits out shared_ptr's. "Entity" is the base class for any type of shared_ptr that gets created from this method.

If I overwrite the pointer in the get_entity method, everything seems to work. If i overwrite the pointer in the get_pointer method it doesn't.

// 
// 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);

    // ...
}

My reasons for passing "e" into the get_pointer method was because i don't always need to modify the pointer. In some cases get_pointer finishes without modifying the pointer at all.

I'm hoping someone can help shed some light on what i'm doing wrong here. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美人迟暮 2024-10-11 16:01:51

自从你将整数传递给 make_shared 以来,我对你想要做的事情感到非常困惑。

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

I'm pretty darn confusuled about wtf you're trying to do since you pass in integers to make_shared.

Your problem may be solved by accepting a reference to Entity::EntityPtr in get_pointer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文