gpt4 book ai didi

C++:结构会被正确复制吗?

转载 作者:可可西里 更新时间:2023-11-01 18:09:53 25 4
gpt4 key购买 nike

我有一个指向结构的指针,我需要实现一个方法来复制结构的所有内存内容。一般来说,我需要执行结构的深拷贝。

结构如下:

typedef struct { 
Size2f spriteSize;

Vertex2f *vertices;

GLubyte *vertex_indices;
} tSprite;

下面是我实现的应该复制结构的方法:

tSprite* copySprite(const tSprite *copyFromMe)
{

tSprite *pSpriteToReturn = (tSprite*)malloc( sizeof(*copyFromMe) );

memcpy(pSpriteToReturn, copyFromMe, sizeof(*copyFromMe) );

return pSpriteToReturn;
}

问题是我不确定数组“vertices”和“vertex_indices”是否会被正确复制。以这种方式复制什么?数组的地址还是数组本身?

是否应该在复制结构后复制数组?还是仅仅复制结构就足够了?

像这样:

...
pSpriteToReturn->vertices = (Vector2f*)malloc( sizeof(arraysize) );
memcpy(pSpriteToReturn->vertices, copyFromMe->vertices, sizeof(arraysize) );
...

提前谢谢你。

最佳答案

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

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


1) 顺便说一句,mallocfree 也是如此。不要使用它们,而是使用 new/new[]delete/delete[]

关于C++:结构会被正确复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2112318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com