在工会地址上的新安置

时间:2018-07-27 03:52:14

标签: c++ memory-management polymorphism new-operator

我想在课堂上使用新的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定义安全缓冲区?

0 个答案:

没有答案