首页 > 解决方案 > 如何将结构深度复制到向量的每个元素

问题描述

嗨,我正在尝试对向量中的每个元素进行结构的完整深层复制,但我没有取得多大成功

这是我的结构

struct YUV_Buffer
{
    mfxFrameSurface1  *mSurface; //structor for video info and data
    int pSize;
    YUV_Buffer(mfxFrameSurface1 *pBuf, int  pSize) :pSize(pSize)

    {
        mSurface = new mfxFrameSurface1[pSize];
        memcpy(&mSurface, &pBuf, pSize);
    }

    YUV_Buffer(const YUV_Buffer & yuvbuf)

    {
        mSurface = new mfxFrameSurface1[yuvbuf.pSize];
        pSize = yuvbuf.pSize;
        memcpy(&mSurface, &yuvbuf.mSurface, pSize);
    }
    ~YUV_Buffer() {
        //if(mSurface != NULL)
        delete[] mSurface;
        mSurface = { 0 };

    }
};

我就是这样称呼它的

vector<YUV_Buffer> mBuffer;
YUV_Buffer root(pVPPSurfacesOut[nSurfIdxOut],sizeof(pVPPSurfacesOut[nSurfIdxOut]));
mBuffer.push_back(root);

pVPPSurfacesOut[nSurfIdxOut] 是一个名为 mfxFrameSurface1 的结构,其中包含视频帧信息和视频帧数据,我需要将完整的结构内容复制到向量中的每个元素,而不会覆盖前一个元素。

我的复制结构的问题是在第二次迭代后结构在析构函数 ~YUV_Buffer() delete[] mSurface; 上崩溃;在 YUV_Buffer

谁能帮我指出正确的方向问候奈杰尔

标签: c++c++11visual-c++

解决方案


你有几个问题。

1:memcpy 应该用指针而不是指针的地址来调用:

memcpy(mSurface, pBuf, pSize);

2:需要实现3/5 https://en.cppreference.com/w/cpp/language/rule_of_three的规则,实现或删除赋值运算符。

这两个问题的解决方案是替换 mfxFrameSurface1std::vector为您进行内存管理和复制:

struct YUV_Buffer
{
    std::vector< char >  mSurface; //structor for video info and data

    YUV_Buffer(const std::vector< char >& surface) :mSurface(surface)
    {
    }

    // YUV_Buffer(const YUV_Buffer & yuvbuf) = default; // no need to implement the copy constructor the automatic one does it all for you
    // ~YUV_Buffer() = default; // don't need a destructor either
};

推荐阅读