オブジェクトbのメンバ変数を用いて動的にメモリを確保しオブジェクトbでオブジェクトaを初期化するとオブジェクトb,オブジェクトaのメンバ変数ともに動的に確保したメモリのアドレスを格納することになります

ソーラー「おさらいです


例えば


次のような


クラスSuutitoMojiがあるとします。


クラスSuutitoMojiのクラス宣言は次のように設定されているとします」

👇


class SuutitoMoji{


public:


int x;


public:


char* i;


};



ソーラー「


このクラスSuutitoMojiのように



クラスSuutitoMojiのメンバ関数宣言に


char*型のポインタ変数宣言


char* i;


が設定されているとします


このとき


bのクラスSuutitoMoji型のオブジェクト宣言


SuutitoMoji b;


を実行して生成される


char*型のポインタ変数であるクラスSuutitoMoji型のオブジェクトbのメンバ変数


b.i


を用いて


b.i=new char[50];


のように


動的にメモリ領域を確保したとします


すると


このとき


クラスSuutitoMoji型のオブジェクトbのメンバ変数


b.iには


動的に確保したメモリ領域の先頭のメモリのアドレスが代入されています


続いて


クラスSuutitoMoji型のオブジェクトa

クラスSuutitoMoji型のオブジェクトb



初期化する命令文


SuutitoMoji a = b;


を実行したならば


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.i



クラスSuutitoMoji型のオブジェクトbのメンバ変数b.i



ともに動的に確保したメモリ領域の先頭のメモリのアドレスを格納することになります


なぜなら


さきほど


b.i=new char[50];


を実行したとき


クラスSuutitoMoji型のオブジェクトbのメンバ変数


b.iには


動的に確保したメモリ領域の先頭のメモリのアドレスが代入されているからです


ですから


SuutitoMoji a = b;


を実行して


a.i=b.i;


が実行されると


クラスSuutitoMoji型のオブジェクトaのメンバ変数


a.iにも


動的に確保したメモリ領域の先頭のメモリのアドレスが代入されることになります


もちろん


a.iとb.iに同じアドレスが格納されているといっても



クラスSuutitoMoji型のオブジェクトaのメンバ変数


a.i



クラスSuutitoMoji型のオブジェクトbのメンバ変数


b.i



        🌞お互い独立したメモリを管理しており🌞



      クラスSuutitoMoji型のオブジェクトaのメンバ変数


                a.i


      に格納されているアドレスを変更したとしても



      クラスSuutitoMoji型のオブジェクトbのメンバ変数


                b.i


      に格納されているアドレスは変更されないし



      クラスSuutitoMoji型のオブジェクトbのメンバ変数


                b.i


      に格納されているアドレスを変更したとしても


      クラスSuutitoMoji型のオブジェクトaのメンバ変数


                a.i


      に格納されているアドレスは変更されないんだね」



  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る