GOGATSU やぶ

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

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

1. メモリフラグメンテーション

 今回はメモリフラグメンテーションを考慮して、newではなく、placement_newを使ってみようということで、newと何が違うのか教えてもらった。

 今回の図は、先輩が描いてくれた図の再現。
 吹き出しなど追加しながら復習する。

---newの場合---

f:id:ybsatsuki:20211201204255p:plain

f:id:ybsatsuki:20211201204649p:plain

f:id:ybsatsuki:20211201204700p:plain

---placement_newの場合---

・メモリをまとめて取得する。

f:id:ybsatsuki:20211201205248p:plain

・メモリを等分割し、インスタンスごとのメモリを同じにする。
 これで2番目のメモリが解放されても、次のインスタンスも同じメモリなので、newのようなメモリの空き方は起こらない。

・でもひとつひとつのメモリについては無駄がでるかも。

f:id:ybsatsuki:20211201205300p:plain

2. noexcept

 例外を出すかどうかをチェックする。
→例外を投げない関数につけて、「これは例外を投げません」と明示することもできる。

 これからコードの改変があったとしても、例外は投げないだろう関数につける。

noexcept - cpprefjp C++日本語リファレンス

c++ - noexceptを実用的にはどのように使っていますか? - スタック・オーバーフロー

3. Linuxのソケットライブラリ(UDP)

Man page of SOCKET

・ポート番号とIPアドレスの指定方法は、使う側に任せる。
 ...使う側の操作が想像できなくて、もやむ。

4. virtual

・子クラスが親クラスと同名の関数を持った場合、子クラスの同名関数を呼び出せば親クラスの関数が呼び出される。
これを子クラス側の同名関数をよばせるようにする仕組みがvirtual。
(継承でよく、virtualついていない関数は継承できたっけと思ってしまう。)