在特定位置分配多态类成员?

时间:2016-03-18 17:05:40

标签: c++ polymorphism malloc new-operator

我有一个包含几个类成员和多态成员的类:

class Container{

    Container::Container(){ p = new Derived();}

    Poly* p;
    A a;
    B b;
};

我想为实际的多态对象Container::p分配内存,在Container::b之后连续分配,而不是通过默认new(),因此malloc()

实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

在某种程度上,细节取决于Container构造函数如何决定Poly的具体类型。据推测,这种选择可能会有所不同。否则,只需在Derived之后声明b成员。

但假设问题有意义,您只需使用新的展示位置,并确保Container只能动态分配。对齐时要小心!令人高兴的是,C ++ 11增加了对此的支持。

确保Container仅动态分配的一种好方法是使析构函数无法访问客户端代码。

对于分配大小,我可能会在类operator new中定义一个自定义分配函数(Container),传递足以确定总对象大小的参数。

但同样,具体情况取决于你所拥有的具体案例:问题不明确。

答案 1 :(得分:-1)

这可以通过新的展示位置来完成。

class Container{

    Container(){ p = new(polyAlloc) Derived(); }

    ~Container(){ p->~Poly(); /* required for placement new */ }

    Poly* p;
    A a;
    B b;
    char polyAlloc[1024]; // where the size is the max size a derived class can be
};