gpt4 book ai didi

c++ - 在构造函数中,我可以获取成员的地址并相信它们将保持不变吗?

转载 作者:行者123 更新时间:2023-11-30 04:28:20 24 4
gpt4 key购买 nike

我有这行代码:

boneHierarchy = BoneHierarchy(Point3D(24.5f,
84.0f + HumanBoundingBox::HEIGHT/2.0f ,24.5f
),
CompassRadians(0.0f),
renderingEngine
);

BoneHierarchy 有一些 vector 作为私有(private)成员。我获取 vector 的地址并将它们传递给渲染类。但是当我调用 vector 的 size 成员函数时,我得到了垃圾。我取的是 vector 的地址,而不是其中的元素。

BoneHierarchy::BoneHierarchy(Point3D const& position,
CompassRadians const& heading,
Renderer* renderingEngine) : counter(0), renderingEngine(renderingEngine)
{




CoordinateSystem bodyCoordSys = CoordinateSystem(
Vector3D(0.0f,1.0f,0.0f),
Vector3D(0.0f,0.0f,1.0f));


map<Normal3D::enumeration, TextureCoordinates> cubeTextureKind;
Normal3D::enumeration normal;
for (normal = Normal3D::begin(); normal != Normal3D::end(); ++normal)
{
cubeTextureKind[normal] = TextureAtlas::textureAtlasCoordLookup(WOOD);
}
Bone body = Bone(
Vector3D(0.0f, HumanBoundingBox::HEIGHT/2.0f,0.0f),
HumanBoundingBox::DIM,
Euler3D(0.0f,0.0f,0.0f),
cubeTextureKind,
bodyCoordSys);
//TODO there are two positions for the human, one here and one in mesh vbo, unify these into one.
body.setPosition(Vector3D(position.getX(),position.getY(),position.getZ()));
body.setEuler(Euler3D((float) (Math::toDegrees(heading.getValue())),0.0f,0.0f));
drawBone(body,UPDATE_ALL);
root = body;


map<string,Renderer::Buffer> vboVariableMap;
vboVariableMap["aVertexPosition"] = Renderer::Buffer(verticesBuf);
vboVariableMap["aTextureCoord"] = Renderer::Buffer(texCoordsBuf);
vboVariableMap["index"] = Renderer::Buffer(indicesBuf);
cout << "aBoneIndex " << boneIndexBuf.size() << endl;
vboVariableMap["aBoneIndex"] = Renderer::Buffer(boneIndexBuf);
vboVariableMap["uBoneMatrix0"] = Renderer::Buffer(transformMatrixBuf);
GLuint textureID = 0;
Renderer::VBODescription vboDescription = Renderer::VBODescription("boneShader",
vboVariableMap,
GL_DYNAMIC_DRAW,
indicesBuf.size(),
textureID);
bufferID = renderingEngine->registerBuffer(vboDescription);
cout << "bufferID " << bufferID << endl;
renderingEngine->printBoneIndexSize();
cout << &(getBoneIndexBuf()) << endl;
}


Renderer::Buffer::Buffer(vector<GLfloat> const& data):
floatData(&data), ushortData(NULL), target(GL_ARRAY_BUFFER)
{
printf("pointer: %p, size: %lu\n", floatData, floatData->size());
}

Renderer::Buffer::Buffer(vector<GLushort> const& data):
floatData(NULL), ushortData(&data), target(GL_ELEMENT_ARRAY_BUFFER)
{
}

最佳答案

如果接受 Point3DCompassRadiansBoneHierarchy 构造函数计算它自己的 vector 成员的地址,那很好。他们的地址不会改变。

该代码还显示了一个赋值语句。右侧临时 BoneHierarchy 的 vector 成员地址将与左侧 boneHierarchy 中存储的 BoneHierarchy 对象的地址不同。确保您没有复制赋值运算符中的地址,否则 boneHierarchy 对象最终将引用不再存在的临时对象的 vector 成员。您还需要检查您的复制构造函数。

关于c++ - 在构造函数中,我可以获取成员的地址并相信它们将保持不变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10218231/

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