Esiste una penalizzazione delle prestazioni quando un metodo virtuale viene chiamato da una classe che è nota per essere la classe derivata in fase di compilazione? Sotto ho chiamato esplicitamente force_speak
con una classe derivata.Prestazioni delle funzioni virtuali chiamate da classi derivate?
Codice:
#include <iostream>
#include <array>
#include <memory>
class Base
{
public:
virtual void speak()
{
std::cout << "base" << std::endl;
}
};
class Derived1 : public Base
{
public:
void speak()
{
std::cout << "derived 1" << std::endl;
}
};
template<class B>
void force_speak(std::array<std::unique_ptr<B>, 3>& arr)
{
for (auto& b: arr)
{
b->speak();
}
}
int main()
{
std::array<std::unique_ptr<Derived1>, 3> arr =
{
std::unique_ptr<Derived1>(new Derived1),
std::unique_ptr<Derived1>(new Derived1),
std::unique_ptr<Derived1>(new Derived1)
};
force_speak(arr);
return 0;
}
Si dovrebbe fare una domanda alla volta. – juanchopanza
Che cos'è una penalizzazione delle prestazioni, qualcosa che pensi sia o qualcosa che hai misurato (o meglio riconosciuto come uno)? –