C++:变量在初始化不同 class 后更改值
C++: Variables change values after initialization of different class
我有以下问题。
PerspectiveCamera pcam2(Point(0, 0, 0), Vector(0.5f, 0.5f, 0.3f), Vector(0, 0, 1), pi * 0.9f, pi * 0.9f);
Renderer r12(&pcam2,0);
在上面的代码中,pcam2
被初始化,然后&pcam2
被传递给r12
。
pcam2
具有成员 const Point& center
、const Vector& forward
、const Vector& up
和两个 float
数字,它们在初始化时按上述顺序传递。
r12
有成员 Camera* cam_
和一个 int
号码。
奇怪的是,在 r12
的初始化过程中,pcam2
的字段 center
的值被更改为某些伪造的值,例如 Point(1.984192e+27, 4.59149455e-41, 0)
在代码中你可以看到 pcam2
是用 Point(0, 0, 0)
初始化的。
从字面上看,在 r12
初始化期间发生的所有事情都是通过成员初始化列表为其成员分配值。
我真的不明白这里发生了什么,而且我对 C++ 的了解还不够,无法自行查找。
提前致谢。
Point(0, 0, 0)
是一个临时对象,只存在到最近的 ;
。如果您在 pcam2
中存储对它的引用,则在带有 pcam2
的行初始化完成后,该引用立即变为悬空。之后对悬空引用的任何访问都是未定义的行为。
您通常不需要在 struct
中存储任何引用,具有所有权语义(即按值存储 copying/moving 数据到 struct
中)不太容易出错并且更容易推理。
我有以下问题。
PerspectiveCamera pcam2(Point(0, 0, 0), Vector(0.5f, 0.5f, 0.3f), Vector(0, 0, 1), pi * 0.9f, pi * 0.9f);
Renderer r12(&pcam2,0);
在上面的代码中,pcam2
被初始化,然后&pcam2
被传递给r12
。
pcam2
具有成员 const Point& center
、const Vector& forward
、const Vector& up
和两个 float
数字,它们在初始化时按上述顺序传递。
r12
有成员 Camera* cam_
和一个 int
号码。
奇怪的是,在 r12
的初始化过程中,pcam2
的字段 center
的值被更改为某些伪造的值,例如 Point(1.984192e+27, 4.59149455e-41, 0)
在代码中你可以看到 pcam2
是用 Point(0, 0, 0)
初始化的。
从字面上看,在 r12
初始化期间发生的所有事情都是通过成员初始化列表为其成员分配值。
我真的不明白这里发生了什么,而且我对 C++ 的了解还不够,无法自行查找。
提前致谢。
Point(0, 0, 0)
是一个临时对象,只存在到最近的 ;
。如果您在 pcam2
中存储对它的引用,则在带有 pcam2
的行初始化完成后,该引用立即变为悬空。之后对悬空引用的任何访问都是未定义的行为。
您通常不需要在 struct
中存储任何引用,具有所有权语义(即按值存储 copying/moving 数据到 struct
中)不太容易出错并且更容易推理。