// Destructor. If there is a C object, delete it.
// We don't need to test ptr_ == NULL because C++ does that for us
~scoped_ptr() {
enum { type_must_be_complete = sizeof(C) };
delete ptr_;
}
注:Cは、テンプレートパラメータであるデストラクタでは、この列挙型は何ですか?
私たちはNULLポインタを削除カント知って、例外が発生します。 この場合、列挙型定義はそれを防ぐために何かをしているに違いありません。 プロダクションでは、NULLポインターがあるため単純なプログラムを終了したくない場合がありますが、ポインターがヌルの場合は別のシナリオを見たい場合があります。 そして、このコードは、ほぼすべての場所で実稼働環境で使用されていますか?
ありがとうございます。
我々は、そうすることを完全に有効であるNULLポインタを削除することができます。 –
私の問題はポインタの二重削除と混同されていたと思います。コンパイラーによって二重削除が検出された場合、常に例外が発生します。ですから、ヌルポインタの削除とダブル削除の違いは何ですか? – maress
@maress:何度でもヌルポインタを削除することができます(実際には削除しようとすると、ランタイムはヌルポインタを検出して何もしません)。 – rjnilsson