C++:结构是否可以正确复制?

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)

先感谢您.

Kon*_*lph 8

根据经验,不要memcpy在普通代码中使用C++(它可能会出现在非常低级的代码中,例如在分配器中)1).相反,创建一个合适的复制构造函数和重载operator =(赋值运算符)来匹配它(析构函数 - 三个规则:"如果你实现复制构造函数operator =和析构函数,你必须实现所有这三个).

如果您没有实现自己的复制构造函数和赋值运算符,C++将为您创建默认版本.这些版本将实现一个浅拷贝(很像memcpy将要做的),即在你的情况下,数组内容不会被复制 - 只有指针.


1)顺便说一下,同样适用于mallocfree.不要使用它们,而是使用new/ new[]delete/ delete[].