c++ - 如何将结构深度复制到向量的每个元素
问题描述
嗨,我正在尝试对向量中的每个元素进行结构的完整深层复制,但我没有取得多大成功
这是我的结构
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
谁能帮我指出正确的方向问候奈杰尔
解决方案
你有几个问题。
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
};
推荐阅读
- javascript - 如何用cheerio提取文本
- swift - 如何使自定义视图及其上的 NSButton 在 macOS swift 中是可点击的?
- c++ - 排序函数调用后数组不变
- r - 使用R在目录中的多个文件中查找字符串序列
- c++ - GLSL忽略片段着色器中的统一布尔比较?
- ruby-on-rails - Rails ActiveStorage:DirectUpload 回调
- c# - 从 .Net 调用 AWS Step Functions
- ajax - Wordpress:从帖子ID(ajax)返回页面的HTML
- php - json_decode() 期望参数 1 是给定的字符串数组
- javascript - 用树状结构组织数据列表中的节点