設置是我有一個對象,並在該對象下面是一個祕密指針。C++修改對象指針指向但值不保存
這個指針指向的是同一個類的一個對象,但是它的對象不是上面那個對象。
我有一個函數,它接受頂部對象並使用指針算術來獲取它下面的指針。
然後在這個函數裏我想修改隱藏指針指向的對象的值。
在調試中,我可以看到在函數中正在修改的值就好了,但是一旦函數返回值不會被保留。
我無法理解爲什麼。
任何想法?
另外我擁有所有這些對象和指針正在創建的內存,所以我不認爲應該發生任何堆問題,因爲我正在做我自己的小內存管理器的樂趣。
我認爲這個問題與我使用reinterpret_cast有關,如果我正確的是什麼是解決方案/替代方案,爲什麼會出現這個問題?
void doWork(Obj* pObj) {
// Get address of the object the pointer is pointing to
unsigned char* position = reinterpret_cast<unsigned char*>(pObj);
// 16 Bytes below the object is a secret pointer
position += (sizeof(Obj) + 16);
// Retrieve the secret pointer
Obj* secretObj = reinterpret_cast<Obj*>(position);
// Modify a value in that secret object
secretObj->value += 1;
}
我試過了通過引用傳遞指針的建議,仍然沒有運氣。
我很困惑,爲什麼指針被傳入的方式,即使真的很重要,因爲我只使用該指針來獲取地址作爲基地,然後我去創建一個新的指針,使用reinterpret強制轉換那(地址+ sizeof(Obj))並且在那個新創建的指針上做我的工作。
有一個思想流派說:每當你使用'reinterpret_cast'你可能做錯了什麼,需要重新考慮你的設計 – Ron
你是對的,它完成與&(* pObj) – mocode10
相同的事情我很困惑,爲什麼雖然,不會取指針的地址而不是指針的地址指着? – mocode10