スマートポインターのことを聞いたことがなかった古いコードプロジェクトのいくつかでは、ポインターがまだ有効なオブジェクトを指しているかどうかを確認する必要があるときはいつでも、常に次のようなことをしていました...
object * meh = new object;
if(meh)
meh->member;
または、オブジェクトを安全に削除する必要がある場合は、次のようになります
if(meh)
{
delete meh;
meh = 0;
}
さて、今、私はブール式でオブジェクトとポインタを両方ともリテラル数で使用することから発生する可能性のある問題について学びました。難しい方法です:。そして今、私は、nullptr
キーワードであるC++のそれほど新しくはないがかなりクールな機能についても学びました。しかし今、私は興味があります。
私はすでにほとんどのコードを調べて修正しているので、たとえば、オブジェクトを削除するときに今書いている
if(meh)
{
delete meh;
meh = nullptr;
}
今、私はブール値について疑問に思っています。あなたが渡すとき、このようなifステートメントにintを言うだけです、
int meh;
if(meh)
次に、それを書き込む必要なしに、暗黙的にゼロをチェックします。
if(meh == 0) // does the exact same check
さて、C ++はポインターに対して同じことをしますか?このようなchar*をifステートメントに渡す場合はどうなりますか?
char * meh;
if(meh)
それでは、暗黙的にnullptrと比較しますか?私はこのようなifを長い間書いてきたので、if(object *)と入力してそのメンバーを呼び出すことにより、使用する前にポインターが有効かどうかを確認するのがこの時点での第2の性質です。これが機能ではない場合はどうしてですか?実装が難しすぎる?コードを台無しにする可能性のあるさらに別の小さな方法を削除することで、いくつかの問題を解決します。