【发布时间】:2013-11-12 16:43:35
【问题描述】:
我有一个奇怪的问题,即 std::vector 中的元素即使设置为 const 也会发生变化。代码如下所示:
for (int i = 0 ; i < simLength ; i++) {
const meshType m = meshType(*(simulator->getMesh()));
meshes.push_back(m);
printMeshes();
simulator->tick();
printMeshes();
}
进一步的向量被声明为
std::vector<meshType> meshes;
我在 C++ 方面有相当常规的经验,但我仍然对一些基本知识感到困惑 不时出现错误。这看起来可能是其中之一,但我不确定。
问题是当我添加一个网格并打印它时,它看起来很好,但是当模拟器打勾并再次打印它时,它已经变成了当前在模拟器中的网格。 这让我怀疑我在保存指针,但我终生无法知道如何保存。
我最初并没有推送 const 对象,而是拼命改变它以使其工作。
任何提示都会被应用。
== 编辑 ==
meshType 是 mmesh 类的 typedef,其中包含一个复制构造函数:
MFloatPointArray* vertices;
MIntArray* faceCounts;
MIntArray* faceConnects;
mmesh::mmesh(const gmesh& orig) {
vertices = new MFloatPointArray(*orig.getVertices());
faceCounts = new MIntArray(*orig.getFaceCounts());
faceConnects = new MIntArray(*orig.getFaceConnects());
}
【问题讨论】:
-
您的
meshType是否实现了正确的复制语义?vector::push_back将元素复制到向量中。您添加的const在此处无效。 -
如果这就是您的意思,我已经为网格创建了一个复制构造函数(请参阅有问题的编辑)。如果没有,我们将给予解释。
标签: c++ pointers vector constants std