// 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_;
}
Nota: C è un parametro di templateCos'è questo enum nel distruttore?
So che non possiamo eliminare un puntatore nullo, un'eccezione sarà sollevata. Quindi, in questo caso, la definizione enum deve fare qualcosa per impedirlo. In produzione, a volte non vogliamo terminare un programma semplice perché abbiamo un puntatore nullo, potremmo voler guardare uno scenario alternativo, quando il puntatore è nullo. E questo codice è utilizzato in produzione, quasi ovunque?
Grazie ragazzi.
Siamo in grado di eliminare un puntatore nullo è perfettamente valido per farlo. –
Penso che il mio problema sia stato confuso con la doppia eliminazione dei puntatori. Solleva sempre un'eccezione quando viene rilevata una doppia cancellazione dal compilatore. Quindi qual è la differenza tra l'eliminazione di un puntatore nullo e la doppia eliminazione? – maress
@maress: puoi "cancellare" un puntatore nullo tutte le volte che vuoi (o in realtà, puoi provare ad eliminarlo, il runtime rileverà il puntatore nullo e non fare nulla) – rjnilsson