Почему виртуальные функции нужно передавать с помощью указателя, а не по значению (объекта)?

Я думаю, что понимаю концепцию виртуальных методов и vtables, но не понимаю, почему существует разница между передачей объект в качестве указателя (или ссылки) и передавая его по значению (какой вид сбрасывает vtable или что-то в этом роде?)

Почему что-то вроде этого работает:

Material* m = new Texture;
poly->setMaterial(m); 
// methods from Texture are called if I keep carrying the pointer around

А не это?:

Material m = Texture();
poly->setMaterial(m);
// methods from Material are called if I pass the value around
7
задан Artjom B. 27 November 2014 в 14:02
поделиться