首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回没有动态内存分配的多态类型?

返回没有动态内存分配的多态类型?
EN

Stack Overflow用户
提问于 2015-04-01 08:24:48
回答 1查看 298关注 0票数 0

有没有一个标准的设计模式可以让我从过程中返回一个多态类型,而不需要在过程中为对象动态分配内存?

或者,多态和动态内存分配在实践中一定是齐头并进的吗?

我希望有一个与C++03兼容的解决方案,但如果有C++11的解决方案,我也很感兴趣。

EN

回答 1

Stack Overflow用户

发布于 2015-04-01 08:52:54

Object Pool

这实际上是为了性能,以减少分配;但是,假设您对对象的实例数量有限制,则它似乎适用于您的场景。下面的代码说明了这一想法。这需要先验地了解所涉及的类型(因为您需要分配必要的对象缓冲区)。另外,删除(将类型返回到池中)也需要注意和了解类型。这可以通过虚函数调用来完成。

代码语言:javascript
复制
template< typename Type >
struct TypePool
{
    static TypePool& GetInstance(){ return pool; }

    Type& GetPooledObject() 
    {
        return arr[0]; // do some real tracking here
    }

  private:
    static TypePool< Type > pool;
    Type arr[10];
};

struct A{ };
struct B : public A { };
struct C : public A { };

// The catch to this design...
TypePool<A> TypePool<A>::pool;
TypePool<B> TypePool<B>::pool;
TypePool<C> TypePool<C>::pool;

struct ObjectFactory
{
    // Actual function you would call to construct the object
    // ObjectFactory::GetType< A > or GetType< B >
    template< typename Type >
    static A& GetType()
    {
        return TypePool<A>::GetInstance().GetPooledObject();
    }
};


int main( int argc, char* r[] )
{
    A& object = ObjectFactory::GetType< C >();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29380823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档