我有一个包含几个类成员和多态成员的类:
class Container{
Container::Container(){ p = new Derived();}
Poly* p;
A a;
B b;
};
我想为实际的多态对象Container::p
分配内存,在Container::b
之后连续分配,而不是通过默认new()
,因此malloc()
。
实现这一目标的最佳方法是什么?
答案 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
};