1

無効なポインターまたはスマートポインターが逆参照されると、コードがクラッシュします。問題を見つけるのに役立つアサートが追加されます。例えば、

Type* p = NULL; // Always initilize to be null.
assert(p); // Add before dereferencing to help to find the problem.
p->f(); // Crashes if p is invalid.

私の質問は、ポインターを逆参照するときにアサーションを自動的に追加する方法です。例えば、

#define PTR_RUN(p, f) assert(p); p->f;

これは機能しますが、読みやすくはなく、マクロの不注意な使用による隠れた問題が発生する可能性があります。より良い方法はありますか?ありがとう。

4

3 に答える 3

2

または、場合によっては例外をスローするある種のスマートポインタを使用する価値があるのでしょうか。

于 2013-02-23T18:29:53.863 に答える
1

指定されたタイプの演算子をオーバーロード->し、場合によってはそれにassert関数を追加できます。私はこれを行ったことがありませんが、うまくいくかもしれません。

于 2013-02-23T18:45:45.960 に答える
1

通常、人々は書いていますが、

if ( p ) p->f

また

 p && p->f

短絡AND演算子の使用

于 2013-02-23T18:17:17.137 に答える