ふるお〜と!- FullAuto

AI・ロボットが普及しBI(ベーシックインカム)が早急に実現されることを願う元ニートのブログ

ふるお〜と!-FullAuto

プライベートメンバ変数はPrivate Class として定義すべき? [C/C++]

f:id:nullpo24:20210425160135p:plain

プログラミング歴10年以上の先輩が上のような実装をしたんだけどさ...

キャメルケースに大文字を使ってるのが違和感あるんだよね

後、私はメソッドに動詞を書くのは必須だと思うのよ Get、Set、Find、Clear、Cancel...etc。

つまりこんな感じ

f:id:nullpo24:20210425161345p:plain

まぁこれは些細な問題だから割とどうでも良いんだけど

さらに上級者が書いたコードを見るとこんな実装してるんよ

f:id:nullpo24:20210425171614p:plain

メンバ変数を全てプライベートクラスにまとめてるんよ

こういう実装にしたほうが後々ぐちゃぐちゃにならずに済む気がするんですよ

dataPtrの使い方はPiyoClassのコンストラクタのコロン:の右で(new)して初期化してるわ

Piyo::Piyo() : dataPtr(new PiyoPrivate)
{
  this->dataPtr->foo = hogehoge;

スマートポインタだからdeleteは無し

おさらいとして、C++は空き領域にあるオブジェクトの管理を支援するための2種類のスマートポインタを提供しているよ

[1] unique_ptr :独占的な所有権を表す。
[2] shared_ptr:共有された所有権を表す。

上記の例では独占的な所有権を表しているからunique_ptrを使っているわ

さらに、このPrivate Classはメンバ変数だけてなく、std::functionでコールバック関数をセットすることもできるわ