Ily*_*ski 7 c c++ pointers memcpy
我有一个指向结构的指针,我需要实现一个复制结构的所有内存内容的方法.一般来说,我需要执行结构的深层复制.
这是结构:
typedef struct {
Size2f spriteSize;
Vertex2f *vertices;
GLubyte *vertex_indices;
} tSprite;
Run Code Online (Sandbox Code Playgroud)
这是我实现的方法应该复制结构:
tSprite* copySprite(const tSprite *copyFromMe)
{
tSprite *pSpriteToReturn = (tSprite*)malloc( sizeof(*copyFromMe) );
memcpy(pSpriteToReturn, copyFromMe, sizeof(*copyFromMe) );
return pSpriteToReturn;
}
Run Code Online (Sandbox Code Playgroud)
问题是我不确定数组"vertices"和"vertex_indices"是否会被正确复制.什么会以这种方式被复制?数组或数组本身的地址?
我应该在复制结构后复制数组吗?或者只是复制结构就足够了?
像这样的东西:
...
pSpriteToReturn->vertices = (Vector2f*)malloc( sizeof(arraysize) );
memcpy(pSpriteToReturn->vertices, copyFromMe->vertices, sizeof(arraysize) );
...
Run Code Online (Sandbox Code Playgroud)
先感谢您.
根据经验,不要memcpy在普通代码中使用C++(它可能会出现在非常低级的代码中,例如在分配器中)1).相反,创建一个合适的复制构造函数和重载operator =(赋值运算符)来匹配它(和析构函数 - 三个规则:"如果你实现复制构造函数operator =和析构函数,你必须实现所有这三个).
如果您没有实现自己的复制构造函数和赋值运算符,C++将为您创建默认版本.这些版本将实现一个浅拷贝(很像memcpy将要做的),即在你的情况下,数组内容不会被复制 - 只有指针.
1)顺便说一下,同样适用于malloc和free.不要使用它们,而是使用new/ new[]和delete/ delete[].
| 归档时间: |
|
| 查看次数: |
4296 次 |
| 最近记录: |