gpt4 book ai didi

c++ - 存储可变数量的派生类的可变数量的对象并进行深拷贝

转载 作者:行者123 更新时间:2023-11-28 00:01:39 26 4
gpt4 key购买 nike

我对如何在 C++ 中实现类似的东西感到有点困惑。我觉得这可能与我的架构有关。
假设我在蒙特利尔有一个车库,在这个车库里,有不同的汽车。我通常会在这里使用指向基类 Car 的指针 vector 。但问题是,我想深入复制车库并在迈阿密开设一个。此外,Saab 汽车需要具有不同的复制构造函数,但具有相同的签名。 以后还会有类似的异常(exception)情况。我事先不知道车库里有什么。这是我到目前为止的代码。

        //base class
class Car
{
public:

Car(int speed);

private:
int speed;

}
class Garage
{
public:
Garage(){};
//copy constructor of the garage
Garage(const Garage &toCopy)
{
for(int i=0;i<toCopy.cars.size();i++)
{
ReceiveCar(*cars[i]);
}
}
vector<std::shared<Car>> cars;
template <typename T>
T* ReceiveCar()
{
std::shared_ptr<T> ptr = std::make_shared<T>();
cars.push_back(ptr);
return ptr.get();
}
T* ReceiveCar(Car &toCopy)
{
std::shared_ptr<T> ptr = std::make_shared<T>(toCopy) cars.push_back(ptr);
return ptr.get();
}

}
class Saab : public Car
{
public:
Saab(int speed)
:Car(speed)
{
DoWork();
};
}
class AstonMartin: public Car
{
public:
AstonMartin(int speed)
:Car(speed)
{
DoImportantStuff();
};
AstonMartin(const AstonMartin& toCopy)
:Car(toCopy.speed)
{
DoImportantStuff();
};
}

当然,使用的复制构造函数是来自 Car 的隐式构造函数。是否有可能调用派生类的一个而不是在 ifs/elses 之间动态转换为规则的每个异常(exception)。也许以某种方式用指针存储每个派生类?
PS:我知道我不应该返回原始指针,但是汽车的析构函数在我的代码中是私有(private)的,所以 shared_pointers 仍然是安全的。

最佳答案

通常的解决方案是使用虚拟 clone() 方法来创建对象的拷贝,而不是使用复制构造函数。

关于c++ - 存储可变数量的派生类的可变数量的对象并进行深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38509940/

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