Показать сообщение отдельно
Старый 18.12.2010, 13:15   #23
jimon
 
Сообщений: n/a
Ответ: Undefined reference to...

не забываем о виртуальном деструкторе в class Animal, а то потом кучу геморроя заимеем

ps. для скорости я убираю virtual в методах которые мне явно не понадобится переопределять, а virtual ... = 0 находится только в декларациях методов интерфейса
те так :
class WildBoar : public Animal {
public:
	WildBoar(short h);
	Animal* Create(); // Может производить сородичей
};
теперь если мы вызываем вот это :
Animal * foo = new WildBoar;
...
foo->Create();
то во второй строчке произойдет обращение к виртуальной таблице методов, и вызов метода по смещению от туда

но если написать так :
Animal * foo = new WildBoar;
...
WildBoar * bar = static_cast<WildBoar*>(foo); // мы уверенны на все 100% что это WildBoar
bar->Create();
то вызов bar->Create(); выполнится напрямую, смещение метода посчитается во время компиляции и не будет никаких тормозов

хочу заметить что в данном случае нет никакого RTTI, и его использовать тоже не стоит (так же как и try...catch), в геймдеве рискуют статическим методом предоставления безопасности кода, а пользуются здравым смыслом
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо за это полезное сообщение:
falcon (18.12.2010), HolyDel (19.12.2010), pax (18.12.2010), Samodelkin (18.12.2010)