ありがちなバグや原因のわかりにくいコンパイルエラーなどの例を書き溜める予定。。。
rubyでは、行の終わりの不要なコンマに注意。
foo = hogeのつもりだったのにfooには配列が入ることになる。
コンストラクタ以外でのコンテナ初期化
コンテナをメンバに持つクラスで、コンストラクタ以外でコンテナを初期化する場合。
class Foo {
public:
void initialize();
...
std::vector<Bar> a_vector_;
...
}
void Foo::initialize() {
a_vector_.reserve( ... );
...
}
initialize()が複数回呼ばれると、そのコンテナの古い中身が捨てられずに残る。
対策
- コンテナを初期化する前にclearする。
- initialize()が複数回呼ばれるようなテストを行う。
間違ってnamespaceを入れ子にしてしまう。
namespace foo {
...
} // namespace foo
namespace std {
void swap(bar &a, bar &b) {...}
}
とするつもりで
namespace foo {
...
namespace std {
void swap(bar &a, bar &b) {...}
}
} // namespace foo
としてしまう。
このヘッダをインクルードしたソースにおいて、std::hogeはfoo:std::hogeと解釈されてしまうので、std名前空間をアクセスする部分でコンパイルエラーとなる。
最終更新:2012年01月22日 13:51