セットアップにはオブジェクトがあり、そのオブジェクトの下には秘密のポインタがあります。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;
}
私は、ポインタを参照渡しの提案を試みたが、まだ運がなかった。
私はポインタが渡される方法が混乱しているのですが、そのポインタをベースとして使用するためにそのポインタを使用していて、再ポインタを使用して新しいポインタを作成すると正直なところです。その(アドレス+ sizeof(Obj))、その新しく作成されたポインタに対する私の作業を行います。
「reinterpret_cast」を使用しているときはいつでも、 – Ron
&(* pObj)と同じことを達成するのは正しいことです – mocode10
なぜ私は混乱していますか?オブジェクトのアドレスではなくポインタのアドレスをポインタとすることはできませんに指差す? – mocode10