目次
- 目次
- はじめに
- 1. クラス内の定数にはstatic constを使う
- 2. enumハックを利用すると便利
- 3. const char * const p =hogehoge; でデータもポインタもconst
- 4. コンストラクタでメンバ変数を初期化する時には、代入ではなく、初期化リストを使う
- 5. クラスオブジェクトをコピーしてほしくない時は、演算子とコピーコンストラクタをprivateにする。
- 6. 仮想関数を持つクラスのデストラクタは仮想にする。
- 7. デストラクタで例外を投げると、複数の例外が発生することになるのでやめる。
- 8. コンストラクタ内では、親クラスの仮想関数を呼んでしまうので、仮想関数は使用しない。
- 9. リソース(ポインタなど)を使用する場合は、auto_ptrなどのリソース管理オブジェクトに渡すようにする。
- 10. 配列をnewした場合、deleteにはをつける。付けなかった場合は付けない
- MyEnigma Supporters
はじめに
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 スタイルガイドにある通り、例外も便利ですが、使い所に注意ですね。
8. コンストラクタ内では、親クラスの仮想関数を呼んでしまうので、仮想関数は使用しない。
これは注意しないと、非常にデバックしにくいバグができてしまいます。
仮想関数系は注意が必要な気がします。
9. リソース(ポインタなど)を使用する場合は、auto_ptrなどのリソース管理オブジェクトに渡すようにする。
deleteという文を書いた瞬間に、
リソース管理オブジェクトを使えないかどうかを考えると良いようです。
10. 配列をnewした場合、deleteにはをつける。付けなかった場合は付けない
なるほどといった感じです。
わかりやすくて覚えやすい説明でした。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。