gpt4 book ai didi

c++ - 将shared_ptr的 vector 复制到抽象基的派生类

转载 作者:行者123 更新时间:2023-12-02 10:02:14 25 4
gpt4 key购买 nike

我正在尝试将派生类的对象实例从vector<shared_ptr<base>>复制到基类是抽象的新vector<shared_ptr<base>>。我希望新的vector包含shared_ptr来复制对象而不是原始对象。

我已经试过了:

class base
{
public:
base(){}
virtual void method() = 0;
};

class derived1 : public base
{
public:
derived1() : base() { };
void method() {};
};

class derived2 : public base
{
public:
derived2() : base() { };
void method() {};
};

int main()
{
std::vector<std::shared_ptr<base>> vector1 =
{
std::make_shared<derived1>(),
std::make_shared<derived2>()
};

std::vector<std::shared_ptr<base>> vector2;
vector2.reserve(vector1.size());
for (const auto& e : vector1)
{
vector2.push_back(std::make_shared<base>(*e));
}
}

这不起作用,因为我无法实例化基类。如何正确执行此操作?

最佳答案

解决此问题的一种方法是在基类上创建一个纯虚拟的克隆方法,该方法返回一个指针-子类重写此方法以为其分配一个副本。

class base
{
public:
virtual std::shared_ptr<base> clone() const = 0;
};

class derived1 : public base
{
public:
virtual std::shared_ptr<base> clone() const override
{
return std::shared_ptr<base>(new derived1(*this));
}
};

关于c++ - 将shared_ptr的 vector 复制到抽象基的派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62069928/

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