gpt4 book ai didi

c++ - 结构 vector 的值意外变化

转载 作者:太空狗 更新时间:2023-10-29 20:44:41 28 4
gpt4 key购买 nike

我有一个奇怪的问题。有一个结构 vector 。使用临时结构,我 push_back 到那个结构 vector 。但是当我检查第一个成员的 cnt 时,我发现它发生了变化。任何的想法? (以下代码是一个简化版本,但具有代表性)

struct Vector
{
float *dim;

Vector ()
{
dim = new float [3];
}
};

struct Face
{
float an_N, an_P;
int P, N;
Vector Af;
float Ad;
Vector cnt;
float ifac;
float mf;
};

std::vector <Face> face;

Face temp_face;

for (;;)
{
temp_face.cnt.dim[0] = 0.f;
temp_face.cnt.dim[1] = 0.f;
temp_face.cnt.dim[2] = 0.f;

for (int q=0; q<n_vtx_2D; ++q)
{
temp_face.cnt = temp_face.cnt + pt[vtx[q]] / n_vtx_2D;
}

face.push_back(temp_face);
}

std::cout << face[0].cnt.dim[0] << std::endl;

输出

0.25

0

最佳答案

默认编译器生成的复制构造函数(和赋值运算符)用于 VectorFace (但最重要的是 Vector )。由于代码重复使用了 Face 的相同实例, 命名为 temp_face , Face 的所有实例在 vector 中 face指向相同的 Face.cnt.dim数组(因为 faces 将包含 temp_face 的拷贝)。

我看不出有任何理由在 Vector 中动态分配数组因为它是固定尺寸。建议改为:

struct Vector
{
float dim[3];
};

或者你需要为Vector实现复制构造函数、赋值运算符和析构函数.参见 What is The Rule of Three?获取更多信息。

关于c++ - 结构 vector 的值意外变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12547918/

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