使用虚拟复制构造函数,类Vehicle
具有copy()
所有继承的类都Car
将实现的虚拟成员函数。
稍后,其他一些类可以将任何类型的车辆作为成员变量:
struct Foo {
Vehicle *v;
Foo(const Vehicle &veh) {
v = veh.clone();
}
};
我不明白这一点。为什么不摆脱clone()
并new
像这样“就地”做
struct Foo {
Vehicle *v;
Foo(Vehicle *veh) {
v = veh; //veh has no clone()
}
~Foo() {
delete v;
}
};
//elsewhere
Foo f(new Car());
有什么缺点(除了它仅适用于“就地”创建)?现在没有人必须实现克隆,一切似乎都容易多了。