Tengo el operador nuevo funcionando pero tan pronto como llamo eliminar, se bloquea en la línea free (ptr)
. ¿Alguien puede decir lo que estoy haciendo mal al sobrecargar operador nuevo y eliminar en esta clase Base? Sugerencia: no estoy preguntando sobre problemas de diseño.Operador eliminar causando daños en el montón mientras el operador funciona bien
class Base {
private:
int i;
public:
Base() : i (10) {
}
static void * operator new (size_t size) {
if (size = 0) size = 1; // please read this line carefully! size = 0!
return malloc (size);
}
static void operator delete (void *ptr, size_t size) {
if (ptr == NULL) return;
free (ptr);
}
};
¿Estás tratando de eliminar un objeto dos veces o eliminar un objeto a través de un puntero no obtenida de llamar 'new'? –
Como nota al margen, 'free (NULL)' está garantizado para ser seguro (un no-op), por lo que no tiene que ser un caso especial. –
hm ... Es malo: si reemplaza 'if (size == 0)' con 'if (size = 0)' y agrega un miembro de datos privados además de un constructor, el código fallará. Sé que 'size = 0' es un error que no debería ocurrir, pero el código falla ÚNICAMENTE cuando inicializas un miembro de datos privados de esta clase en el constructor. – Jaywalker