Значение вектора структур неожиданно меняется

У меня странная проблема. Есть вектор структур. С временной структурой я возвращаюсь к этому вектору структур. Но когда я проверяю первого члена 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

3

Решение

Сгенерированный компилятором конструктор копирования (и оператор присваивания) используется для Vector а также Face (но самое главное Vector). Поскольку код повторно использует тот же экземпляр Faceпо имени temp_face, все случаи Face в векторе face указывают на то же самое Face.cnt.dim массив (как faces будет содержать копии temp_face).

Я не вижу причин для динамического размещения массива внутри Vector как это фиксированный размер. Предложить изменение на:

struct Vector
{
float dim[3];
};

Или вам нужно реализовать конструктор копирования, оператор присваивания и деструктор для Vector,
Увидеть Что такое правило трех? для дополнительной информации.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]