Che*_*tpp 1 c++ copy-constructor memcpy
我用memcpy复制一个Vertex由glm :: vec3对象组成的结构.它可以在类函数中复制结构.它在该函数返回类对象时调用的复制构造函数中不起作用.
为什么?
类函数返回对象
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;
}
Run Code Online (Sandbox Code Playgroud)
复制构造函数
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;
}
Run Code Online (Sandbox Code Playgroud)
顶点:
#ifndef VERTEX_H
#define VERTEX_H
#include <glm/glm.hpp>
struct Vertex {
glm::vec3 position;
glm::vec3 color;
};
#endif
Run Code Online (Sandbox Code Playgroud)
memcpy(verts, data.verts, sizeof(data.verts)); //DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)
不起作用,因为verts是一个指针,而不是一个数组.sizeof(data.verts)不计算指针指向的数组的大小.它只是评估平台上指针的大小.
你应该可以使用:
size_t n = sizeof(*data.verts)*data.numVerts;
memcpy(verts, data.verts, n);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |