我正在实现一个 virtual clone()
方法,除了返回对象的“实际”类型外,它可以完全相同,而且我意识到会有很多复制。例如,这是我想避免的明显解决方案:
AbstractVehicle* ConcreteCar::clone() const
{
auto c = new ConcreteCar;
c->setSomething(this->getSomething());
return c;
}
AbstractVehicle* ConcreteJet::clone() const
{
auto j = new ConcreteJet;
j->setSomething(this->getSomething());
return j;
}
这就是我想要的:
AbstractVehicle* AbstractVehicle::clone() const
{
auto v = new this->ACTUAL_CLASS;
v->setSomething(this->getSomething());
return v;
}
有什么简单的方法可以做到这一点?如果不是,我很想知道为什么会这样,因为天真地说,与动态调度之类的东西相比,实现起来似乎更具挑战性。
最佳答案
没有。 operator new
要求在编译时指定它正在创建的对象的类型。您所要求的要求要创建的对象类型在编译时未知,并在运行时计算(或以其他方式获得)。
关于c++ - 当前对象的访问类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33714506/