// 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 es un parámetro de plantilla¿Para qué es esta enumeración en el destructor?
Sé que no podemos borrar un puntero nulo, se produce una excepción. Entonces, en este caso, la definición enum debe estar haciendo algo para evitar eso. En producción, a veces no queremos finalizar un programa simple porque tenemos un puntero nulo, es posible que deseemos ver un escenario alternativo, cuando el puntero es nulo. Y este código se usa en producción, casi en todas partes?
Gracias chicos.
Podemos eliminar un puntero nulo es perfectamente válida para hacerlo. –
Creo que mi problema se confunde con la eliminación doble de punteros. Siempre genera una excepción cuando el compilador detecta una eliminación doble. Entonces, ¿cuál es la diferencia entre eliminar un puntero nulo y una eliminación doble? – maress
@maress: puede "eliminar" un puntero nulo tantas veces como quiera (o en realidad, puede intentar eliminarlo, el tiempo de ejecución detectará el puntero nulo y no hará nada) – rjnilsson