2009/02/06

C++ memo

以下のようなことはどのようなC++本にも書いてある。スルー推奨。
意識したとき(再認識したとき)に書き留めるのは「個人的に」重要なので書いておく。

----
  • クラスメンバとしてポインタを定義する場合は、コピーコンストラクタと operator= に注意
  • クラスメンバとしてポインタを定義する場合は、これらを暗黙のうちに定義させると、コピー元 が消えた際に、コピー先のポインタメンバの実体も消えてしまう。必ず意識し、定義すること
  • コンストラクタとデストラクタは比較的注意がいくが、この二つは見落とされがちである
----
  • (ポインタではない)実体として定義されたメンバは、そのメンバが含まれたクラスのコンストラクタが呼ばれるたびに初期化され、破棄される際に消える
  • 実体として定義すると、そのクラスのインスタンスのサイズが大きくなる。通常、クラスには他のオブジェクトもメンバとして含められるので、ポインタよりサイズが大きいから。
  • 実体として定義されたメンバは、そのメンバが含まれたクラスのインスタンスが生存している間存在する。よって、メンバ関数からその参照を返しても構わないが、そのインスタンスの生存期間は参照を使う側が意識する必要が出てくる

1 件のコメント:

しる さんのコメント...

どういう状況なのかよく分からないですが、std::tr1::shared_ptrやboost::shared_ptrで幸せになれる状況な気がします。