http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
CWaterRenderingStrategy::~CWaterRenderingStrategy()
{
delete m_Geometry;
delete m_Shader;
}
e poi subito dopo:
COceanRenderingStrategy::~COceanRenderingStrategy()
{
delete m_Geometry;
}
Boom. Double delete e memory corruption. Qualcuno ha perso due ore per cercarlo. Il mio errore e' stato non seguire il pattern RAII e rilasciare m_Geometry nella classe base, ma la classe base non l'aveva inizializzato quindi non ne aveva l'ownership e non doveva cancellarlo. Nella classe derivata ho correttamente costruito e distrutto l'oggetto, ma l'ho scritta mesi dopo.
Per altro... uno strategy pattern in questa situazione era overingegnerizzato. Non mi serviva ed ha offuscato il bug. Altra lezione.