GOGATSU やぶ

【C++】【振り返り】備忘録

色々備忘録。自分用メモ。

1. 配列をコンストラクタで初期化する。

クラスのコンストラクタの引数に、ある配列の先頭アドレスを入れる。
作業中は配列の先頭アドレスということを思い出せず、コンストラクタの初期化処理に詰まった。

あと、配列はそのまま代入することができない、というのも忘れてた。

なので、コンストラクタの初期化時に、 初期化子リストの引数に入れるということがそもそもできない。
コンストラクタの処理の中で、配列をコピーする必要がある。

---C++の配列とポインタ---

配列は、要素ひとつひとつにメモリが割り当てられる。
このメモリの先頭アドレスを使用して、配列の要素にアクセスすることができる。

配列とポインタの奇妙な関係 - 苦しんで覚えるC言語

----------------------------

2. void*

型なしのポインタ。
サイズがわからない。

★詳しく調べていない。後日の宿題。

汎用ポインタ

3. コンストラクタの引数でもらったアドレスに、メンバ変数の構造体の実体を入れ、アロケータで確保したメモリにコピーする。

実装したけど、自分の中で繋がらない。
書き出してみる。

  1. コンストラクタの引数で、配列の先頭アドレスをもらう。
  2. コンストラクタの処理で、上記の先頭アドレスを保持する。
  3. 標準ライブラリのallocate()で、メモリを動的に確保する。  このとき、確保したメモリの最初の要素のポインタ(先頭アドレス)が戻ってくる。
  4. ある構造体を、上記で確保したメモリに入れたい。
  5. 上記の構造体の実体に、引数でもらったアドレスを使って、中身をコピーしたい。

---------------------------------------

調べているうちに見つけた。
これなんじゃないか?
【C言語入門】mallocの使い方(memset, memcpy, free, memcmp) | 侍エンジニアブログ

・構造体のポインタを宣言して、そのポインタに確保したアドレスを入れる。
・これで構造体の各要素のためのメモリが確保される。

したらこれに、メンバ変数で保持していたメモリを順次コピーしていって、中身を移していけばいいのでは。
できるかも...。
今日の作業でやってみよ。