読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Effective C++を読んで心に響いたこと

c++ Programming

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)

C++ためのベストプラクティスを説明した本として

非常に有名な本ですが

読んでいて心に響いた内容をメモとして残しておきます。

個人用のメモなので、詳細を知りたい人は

是非この本を読んでみてください。

1. クラス内の定数にはstatic constを使う

これまでクラスenumを使っていましたが、

こちらのほうがシンプルですね。

2. enumハックを利用すると便利

enumハックとは、クラス宣言の中でenumを使って定数を作ることです。

例えば、下記のように書くとNumを5としてリマップできます。

enum{Num=5};

エラーコード関連でこれを使うと超便利でした。

3. const char * const p =hogehoge; でデータもポインタもconst

constの場所によってconstになる対象が変わるようです。

ポインタのconstはあまり使ったことがありませんでした。

4. コンストラクタでメンバ変数を初期化する時には、代入ではなく、初期化リストを使う

これも知りませんでした。

初期化リストにすることにより、計算効率も良くなるようです。

初期化リストの詳しい説明はこちらの記事がわかりやすかったです。

代入より初期化

5. クラスオブジェクトをコピーしてほしくない時は、演算子とコピーコンストラクタをprivateにする。

これも非常に便利です。

ポインタをメンバに持つクラスには、これを使うようにしました。

6. 仮想関数を持つクラスのデストラクタは仮想にする。

これも注意が必要ですね。

自動的に保護されるようにならないかな?。

7. デストラクタで例外を投げると、複数の例外が発生することになるのでやめる。

以前のGoogle スタイルガイドにある通り、例外も便利ですが、使い所に注意ですね。

myenigma.hatenablog.com

8. コンストラクタ内では、親クラスの仮想関数を呼んでしまうので、仮想関数は使用しない。

これは注意しないと、非常にデバックしにくいバグができてしまいます。

仮想関数系は注意が必要な気がします。

9. リソース(ポインタなど)を使用する場合は、auto_ptrなどのリソース管理オブジェクトに渡すようにする。

deleteという文を書いた瞬間に、

リソース管理オブジェクトを使えないかどうかを考えると良いようです。

10. 配列をnewした場合、deleteにはをつける。付けなかった場合は付けない

なるほどといった感じです。

わかりやすくて覚えやすい説明でした。

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com