C++による事前・事後契約
2006/04/15
それでは、標準C++
におけるDbC
の実現手段をひととりチェックしてみましょう。事前条件を実現するには、assert
を関数の先頭部で使うことが有効であると、誰もが考えるでしょう。それは正解ですし、正しいassert
の使い方といえます。
事後条件はどのようにするべきでしょうか。事後条件は関数の動作の終了後、端的に言えばreturn
の後で実行されることが望ましく、関数の先頭に書きたいため、関数の終端にassert
を入れるだけではDbCの性質をうまく実現することはできません。昨日紹介したこのページは、この課題についてデストラクタが有効であると回答しています。
void
foo()
{
struct
Sentry
{ Sentry()
{ ...preconditions...
}
~Sentry()
{ ...postconditions...
}
} sentry;
...implementation...
}
デストラクタはインスタンスがスコープを抜けた際にコールされますから、事後条件を関数の終了後にチェックできます。