1

コピー代入とポインタに疑問があります。

例として示します。

class Abc 
{      
public:
  Abc() { q = new Qwe;}
  Qwe* GetQwe() { return q; }

private:

  Qwe* q;
};

Abc* a = new Abc();
Qwe* aux = a->GetQwe();
aux->Modify();

GetQwe を呼び出すと、q の値のコピーが返されるが、q と同じメモリ位置にないかどうかはわかりません。

私の質問は、Abc の q は変更されますか?

4

3 に答える 3

4

私の質問は、Abc の q は変更されますか?

Noq自体は変更されずGetQwe()、 と同じメモリ位置を指しているポインターのコピーを返しますが、とが指しているqオブジェクトは同じであり、呼び出しによって変更できます。そのメンバー関数を呼び出す前に初期化する必要があります。qauxModify()Abc::q

于 2013-04-24T09:11:46.880 に答える
3

ポインタのコピーを返します。このコピーは、元のポインターが指すメモリ内の同じオブジェクトをq指します。したがって、ポインターqは変更されませんが、変更されpointeeます。

于 2013-04-24T09:11:41.617 に答える