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& centerconst Vector& forwardconst 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 中)不太容易出错并且更容易推理。