Tengo un problema con un par de clases de controlador de eventos que estoy tratando de escribir. Básicamente, la idea es tener una clase de controlador de eventos para cada grupo lógico de objetos. En la mayoría de los casos, los eventos se producen entre objetos y su controlador, pero en algunos casos también se envían eventos entre objetos del manejador.Llamando eliminar en dos punteros al mismo objeto
He escrito el código de tal manera que los eventos se colocan en una pila (stack como en la estructura creada usuario; los acontecimientos mismos se distribuyen utilizando new
) y delete
d después de su información se lee y actuar en consecuencia. Esto me está dando algunos problemas porque, en un caso, el evento se envía a lo largo de una cadena de tres manejadores. Diga, HandlerA
envía new Event
a HandlerB
, que lo coloca en la pila y lo lee, enviándolo a HandlerC
, que lo lee y realiza todo lo que necesita para realizarlo, después de lo cual delete
es el puntero de evento y lo establece en NULL
. Ahora, volvemos al HandlerB
y, bueno, también quiere delete
y NULL
el puntero al evento. Pero el puntero es una variable local y termina borrando la misma dirección dos veces, dando una excepción.
¿Cómo se puede solucionar esto? ¿Necesitas usar uno de esos lujosos auto_ptr
s (que todavía aprenden temprano), o me estoy perdiendo algo fundamental aquí?
Los eventos se asignan en stack o se asignan en heap (usando new) y se almacenan en una estructura de datos de pila? – Naveen
Los eventos se asignan en el montón usando new y se almacenan en una estructura de pila. Creo que debería cambiar la redacción anterior ... –