1. C++ / Говнокод #12898

    +15

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    for(std::list<Eff_t*>::iterator i = m_effects.begin(); i != m_effects.end(); ++i)
    	{
    		Rot3DEff_t* pRot3DEff = dynamic_cast<Rot3DEff_t*>(*i); 
    		//иначе вместо деструктра Rot3DEff_t вызывается деструктор Eff_t
    		//если этого не делать не освободится текстура m_pText класса Rot3DEff_t
    		if (pRot3DEff)
    			delete pRot3DEff;
    		else
    			delete *i;
    	}

    Запостил: lifemaker, 16 Апреля 2013

    Комментарии (5) RSS

    • что-то вспомнился фейл кутешников, когда они где-то в недрах qtmultimedia-5 забыли сделать деструктор виртуальным
      Ответить
    • И так для всех остальных потомков Eff_t, у которых появились новые поля...
      Ответить
    • Амнистия. Теперь и на С++
      Ответить
    • > dynamic_cast

      нужно больше RTTI! А вообще - автор любит тяжёлый труд руками, не в ту отрасль пошёл :)
      Ответить
      • > нужно больше RTTI!
        #include <typeinfo>
        
        for(std::list<Eff_t*>::iterator i = m_effects.begin(); i != m_effects.end(); ++i)
        {
        	std::type_info type = typeid(*i);
        	if (type == typeid(Rot3DEff_t *))
        	{    
        		Rot3DEff_t* pRot3DEff = static_cast<Rot3DEff_t*>(*i);
        		delete pRot3DEff;
        	}
        	else
        		delete *i;
        }
        Ответить

    Добавить комментарий