扩展一个类时,多态性和组合之间的性能是否存在差异?使用组合(在C++中)使用以下示例:
class Window
{
public:
Window(Renderer &renderer) : m_renderer(renderer)
{ }
void update()
{
....
m_renderer.draw(this);
}
private:
Renderer &m_renderer;
}
Run Code Online (Sandbox Code Playgroud)
...并使用多态性:
class Window : public Renderer
{
public:
virtual ~Window() {};
void update()
{
...
draw();
}
protected:
virtual void draw() = 0;
}
Run Code Online (Sandbox Code Playgroud)
组合版本使用引用作为成员,所以我认为它需要更多的空间,但是在这两个版本中是否有任何性能提升?
注:我已签出后,如类似这样,但不包括性能.
谢谢您的回答!
好吧,如果你提出这样的问题,那么是的,有一个记忆/速度权衡.
1.组成
2.继承
所以你可能会说继承成本略高......但实际上它只是看不见的.与图形渲染所需的内部计算相比,函数调用的开销几乎可以忽略不计.
另一方面,语义不同.无论你是否继承都很重要.你Window是一个Renderer?是否有意义 ?
首先写出理智的代码.然后优化为(如果!!!)需要.