gpt4 book ai didi

c++ - 等同于memcpy不同的结果?

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:00 26 4
gpt4 key购买 nike

我使用 memcpy 复制了一个由 glm::vec3 对象组成的 Vertex 结构。它可以在类函数中复制结构。它在该函数返回类对象时调用的复制构造函数中不起作用。

为什么?

类函数返回对象

ShapeData ShapeGenerator::drawTriangle() {
ShapeData ret;

Vertex verts[] = {
glm::vec3(0.0f, 1.0f, 0.0f),
glm::vec3(1.0f, 0.0f, 0.0f),

glm::vec3(-1.0f, -1.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f),

glm::vec3(1.0f, -1.0f, 0.0f),
glm::vec3(0.0f, 0.0f, 1.0f),
};

ret.numVerts = NUM_ARRAY_ELEMENTS(verts);
ret.verts = new Vertex[ret.numVerts];
memcpy(ret.verts, verts, sizeof(verts)); //WORKS

GLushort indicies[] = {0,1,2};
ret.numIndicies = NUM_ARRAY_ELEMENTS(indicies);

ret.indicies = new GLushort[ret.numIndicies];
memcpy(ret.indicies, indicies, sizeof(indicies));

return ret;
}

复制构造函数

ShapeData(const ShapeData& data) {

verts = new Vertex[data.numVerts];
//memcpy(verts, data.verts, sizeof(data.verts)); //DOES NOT WORK
std::copy( data.verts, data.verts + data.numVerts, verts);


indicies = new GLushort[data.numIndicies];
memcpy(indicies, data.indicies, sizeof(data.indicies));

numVerts = data.numVerts;
numIndicies = data.numIndicies;

std::cout << numVerts << std::endl;

}

顶点:

#ifndef VERTEX_H
#define VERTEX_H

#include <glm/glm.hpp>

struct Vertex {
glm::vec3 position;
glm::vec3 color;
};

#endif

最佳答案

memcpy(verts, data.verts, sizeof(data.verts)); //DOES NOT WORK

不起作用,因为 verts 是指针,而不是数组。 sizeof(data.verts) 不会评估指针指向的数组的大小。它只是评估您平台上指针的大小。

您应该能够使用:

size_t n = sizeof(*data.verts)*data.numVerts;
memcpy(verts, data.verts, n);

关于c++ - 等同于memcpy不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39477888/

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