C++_値クラス ( 値オブジェクト ) メモ程度

「コンストラクタに引数を渡して初期化」記事の Memo の箇所を掘り下げたかったが、
結構重いのでさらっと調べ。よく分からん。

参照オブジェクト

new したら必ず delete 。削除し忘れや、削除の重複など注意しなければならない。

 

オブジェクト

次のような特徴がある。

  • 保持するデータが重要な意味を持つ。
  • インスタンスが異なっていても、同じ値を保持していれば同じオブジェクト。
  • 自由にコピーを作れる。
  • int や double などの基本データ型と同じセマンティックスで使用される。
    セマンティックス:表記は違えども意味は同じ、的な? 表現より意味に着目する。

 

 次のような使われ方が想定 (Name クラス)

    Name name1("Hoge");
    Name name2("Fuga");
   
    Name name3(name1);  //オブジェクトのコピー
    name3 = name1;  //オブジェクトの代入

メモリを動的に確保している場合は、
コピーコンストラクタと代入演算子を明示的に定義する。
メモリ云々のエラーが発生するもよう。

 

 

コンストラクタのメモ

コンストラクタ

オブジェクトを初期化する際に自動で呼ばれる。

デストラクタ

オブジェクトを削除する際に呼ばれる。

コピーコンストラクタ

オブジェクトを引数に取るコンストラクタ。

    Hoge hoge;
    Hoge hoge(hhh); //コピーコンストラクタ。

 

コピーコンストラクタが呼ばれるタイミング 

1 )
オブジェクトの初期化時

    Hoge hoge;
    Hoge hoge2 = hoge;

2 )
オブジェクト関数値渡しする時

    Hoge hoge;
    piyo(hoge);
    // piyo に渡されるのは、hoge のコピー

3 )
関数からオブジェクト値渡しする時

関数が何かの値を返す時は、ポインタで無い限り
オブジェクトのコピーとなる。なのでコピーコンストラクタが呼ばれる。

  Hoge xxx()
  {
      return Hoge();
  }
 
  //Main ↓
  Hoge h = xxx();

よく分からん。

 

 

こちらから。
https://www.ogis-ri.co.jp/otc/hiroba/technical/CppDesignNote/
http://www.atmarkit.co.jp/aig/01xml/semantics.html
https://qiita.com/youthini/items/2314ad7cf498e5f199d7
http://yohshiy.blog.fc2.com/blog-entry-303.html

以上。