ポインタをよく把握していると思った瞬間、また戸惑いました。あなたの洞察はおそらく役立つでしょう。
私は、次のように、非常に一般的な言葉で私を混乱させるものを述べることができると思います。
a)私が書いた場合A* p = new A()
; (A
クラスはどこにありますか)そして、のようなことをすると、が(*p).do_stuff()
指すオブジェクトp
がメモリ内を移動する可能性があるのに、なぜp
それでも私のオブジェクトを指すのでしょうか?
b)クラスとクラスのメンバー変数はどのようにメモリに格納されますか。
しかし、私がもう少し具体的に持っている問題をあなたに話す方がもっと役に立つかもしれません。Car
メンバー変数を持つクラスがあるとしますEngine engine_;
(Engine
他のクラスはどこにありますか)。罰金。ここで、何らかの理由で、のポインタであるメンバー変数を持つクラスを作成したいとしますEngine
。
class Car
{
friend Repair;
public:
Car() {engine_ = Engine();}
private:
Engine engine_;
};
class Repair
{
public:
Repair(const Car &car) : engine_(&(car.engine_)) {}
private:
Engine *engine_;
};
いつも私の車のエンジンを指す可能性はありませんrepair.engine_
、ありますか(?)しかし、この2番目のバージョンでも:
class Car
{
friend Repair;
public:
Car() {engine_ = new Engine();}
~Car() {delete engine_;}
private:
Engine *engine_;
};
// Maybe I need/should write consts somewhere, not sure
class Repair
{
public:
Repair(const Car &car) : engine_(car.engine_) {}
private:
Engine *engine_;
};
これが機能する可能性は高いようですが、どのように機能するか/理解できません...
よろしくお願いします!