我想在课堂上使用新的Placement。 为了使缓冲区适合多个不同的类,我创建了一个union成员作为缓冲区。 如下定义的类,
class MyBase
{
public:
virtual void vFunc0(){}
virtual void vFunc1(){}
protected:
int memberA;
int memberB;
};
class SubClassA:public MyBase
{
virtual void vFunc0()override{}
virtual void vFunc1()override{}
};
class SubClassB:public MyBase
{
int subMemberB;
};
我定义了一个翘曲类
class WarpClass
{
public:
WarpClass( EMySubType subType )
{
memset(&m_Buffer,0,sizeof(m_Buffer));
void* pBuffer = &m_Buffer;
switch (subType)
{
case ESubA:
::new (pBuffer) SubClassA();
break;
case ESubB:
::new (pBuffer) SubClassB();
break;
default:
::new (pBuffer) MyBase();
break;
}
}
private:
union
{
char _b0[sizeof(MyBase)];
char _b1[sizeof(SubClassA)];
char _b2[sizeof(SubClassB)];
}m_Buffer;
};
因为我从事的项目没有内存管理功能,所以我想创建一个可以适合系列类和子类的静态数组,因此我想出了一种方法来扭曲它们。
这样会不会引起任何问题?还是有更好的方法为新的Placement定义安全缓冲区?