レガシーコードでこのバグに出くわしました:
class MyAPIHandler
{
private:
int handle;
public:
void MyApiHandler() // default constructor
{
handle = 42;
};
};
警告なしで正常にコンパイルされますが、コンストラクター名のスペルが間違っているため、動作は意図したものではありませんでした。これだけで「関数は値を返さない」という警告が表示されますが、自動操縦を使用していて、これを「修正」するために「void」戻り値の型を追加したと思います。
さて、バグ修正は簡単でしたが、私の質問はこれです:-
この種のバグの再発を防ぐには、どのような手法を使用できますか?
一部の言語では、明示的な「コンストラクター」キーワードが必要であり、この問題が明らかになるはずです。単体テストでも、明らかにそれをキャッチする必要がありました。他に何ができますか?