class Triangle : public Shape {
public:
Triangle();
void draw();
~Triangle();
}
class Square : public Shape {
public:
Square();
void draw();
~Square();
}
class Circle : public Shape {
public:
Circle();
void draw();
~Circle();
}
class Container {
public:
void addShape(string type); //Create and add instance of selected type to render_list
void render(); //iterate through render_list and draw() each object
private:
vector<Shape*> render_list;
}
如果以非常快的速度调用 render() 方法,这是实现异构集合的好方法吗?
vtable 的使用会带来性能问题吗?
有什么替代方案吗?
这是实现异构集合的好方法吗?
它会起作用,但我不认为这是一个好方法。问题是您的
vector
使用原始指针 (Shape*
),它可能会导致内存泄漏。更喜欢使用智能指针的容器,即 std::vector<std::unique_ptr<Shape>>
,而不是原始指针 std::vector<Shape*>
。
vtable的使用会对性能造成问题吗?
对性能的影响可以忽略不计。这就是多态性非常正确的用法。
还有其他选择吗?
是的,有很多。从
enum
s,通过附加点和/或 union
s。他们比这个更好吗?我不会这么说。每种方法都有自己的优点和缺点,但您的方法可能是最具可读性的方法,这是编写代码时极其重要的因素。
替代方案的另一个问题是“如果不牺牲间接性,它们都无法保持代码分离”(感谢@SoronelHaetir)。