结构矢量值意外变化

Shi*_*bli 3 c++ structure stdvector

我有一个奇怪的问题.有一个结构向量.使用临时结构,我push_back到结构向量.但是当我检查第一个成员时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;
Run Code Online (Sandbox Code Playgroud)

产量

0.25

0

hmj*_*mjd 5

生成的拷贝构造函数(和赋值运算符)默认的编译器被用于VectorFace(但最重要的Vector).当代码重新使用相同的实例Face,命名时temp_face,Face向量中的所有实例都face指向同一个Face.cnt.dim数组(因为faces它将包含副本temp_face).

我看不出任何动态分配内部数据的原因,Vector因为它是一个固定的大小.建议改为:

struct Vector
{
    float dim[3];
};
Run Code Online (Sandbox Code Playgroud)

或者您需要实现复制构造函数,赋值运算符和析构函数Vector.看什么是三规则?欲获得更多信息.