gpt4 book ai didi

c++ - 虚拟复制构造函数(克隆函数)有什么意义?

转载 作者:太空狗 更新时间:2023-10-29 20:14:29 24 4
gpt4 key购买 nike

使用虚拟复制构造函数,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());

有什么缺点(除了它只适用于“就地”创建)?现在没有人需要实现克隆,一切似乎都容易得多。

最佳答案

它们的意义在于当您有一个指向基类的现有指针并且想要“无论它是什么”的拷贝时。

考虑:

class Base;
class Derived1 : public Base;
class Derived2 : public Base;

Derived1* d1 = new Derived1();
Derived2* d2 = new Derived2();
makeACopy(d1);
makeACopy(d2);

void makeACopy(Base* base) {
// ??? What is it?
};

参见 my answer here还有here .

关于c++ - 虚拟复制构造函数(克隆函数)有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com