みゆにゃんぶろぐ

ゲーム(開発)/カラオケ/サイクリング/コーヒーの話題多め。毎週木曜日or金曜日更新

6月8日

最近、プログラミングするのが楽しい。正確には、ゲーム制作が少しでも楽になれるようなライブラリ的なクラスを作るのが楽しい

てなわけで今回は自分に対するメモも兼ねて、久々に技術的なことを書いていく

今回は盛りだくさんの2本立て

 

シングルトンパターンとユニークポインタの違い

最近の授業でよく出てくる「シングルトンパターン」と「ユニークポインタ」

2つとも「唯一の存在」的な感じだけど、ちゃんと理解していないと両方とも同じような意味に感じてしまうかもしれない

これが2つの違いである

シングルトンパターンは、そのクラスのインスタンスを1つしか生成できない

ユニークポインタはそんなことなくて、同じクラスのインスタンスを何個でも生成できる

じゃあ何が「ユニーク」なのかというと、以下の通りである

ユニークポインタはコピーができない。これがユニークの正体

しかし、関数の引数などでユニークポインタを受け取りたいときはどうしたらいいのか

そんなときに使うのがstd::move()である

先程も書いた通り、コピーはできないのでエラーになる

そこでstd::move()を使うことでポインタの所有権を渡すことで、無事受け渡しができた

ちなみに、std::move()した時点で引数のユニークポインタはemptyになる

 

便利なforの使い方

C++11からの機能で、forがいわゆるforeachのような書き方ができるようになった

これがとても便利

たとえば、vectorコンテナで全ての要素を参照したいときはこうすることが多い

これは以下のようにも書くことができる

すごく短くなった

vの中にvectorコンテナ(a)の各要素が入るので、vを使ってあとは好きな処理を書けば、全ての要素で同じ処理が行われる

ちなみに、vectorコンテナ以外にも普通の配列でも同じように書くことができる

もともとこの機能があるのはなんとなく知ってたけど、その当時はいまいち使いこなすことができなかったから使ってなかった

けど、今日のネットワークプログラミングの授業でforeachが出てきたときに思い出して、C++でやってみたら思いのほか簡単に使えたのでびっくり

こっちのほうが短いし楽なので、今度からはこっちを使っていこうかなと思った