我有以下問題。
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,該欄位的值center的pcam2得到改變一些假像Point(1.984192e 27, 4.59149455e-41, 0),當在代碼中你可以看到,pcam2初始化所用Point(0, 0, 0)。從字面上看,在初始化期間發生的所有事情r12都是通過成員初始化串列為其成員分配值。
我真的不明白這里發生了什么,而且我對 C 的了解不夠,無法自己找出答案。
提前致謝。
uj5u.com熱心網友回復:
Point(0, 0, 0)是一個臨時物件,只存在于最近的;. 如果您將對其的參考存盤在 中pcam2,則該參考在pcam2初始化行完成后立即變為懸空狀態。之后對懸空參考的任何訪問都是未定義的行為。
您通常不需要在structs 中存盤任何參考,擁有所有權語意(即按值存盤和將資料復制/移動到struct)不易出錯且更容易推理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368665.html
下一篇:C :由常量參考傳遞的變數更改值
