将shared_ptr的向量复制到抽象基的派生类
Copy vector of shared_ptr to derived classes of abstract base
我正在尝试将派生类的对象实例从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的向量复制到抽象基的派生类
- 从从该抽象类派生的 Python 对象强制转换C++抽象类C++
- 两个抽象类,派生自同一个基类.如何访问从一个抽象类到另一个抽象类的指针
- 如何防止派生类成为 c++ 中的抽象类?
- 抽象和派生与std::list相结合
- 无法实例化抽象类,但类不是抽象/派生方法的参数
- 复制从抽象类派生的对象
- 派生数据类型与抽象数据类型
- OOP - 抽象类类型,初始化基类和派生类中的变量
- 将抽象派生类对象存储在基类向量中
- 具有数据类型的C 抽象基础将在派生类中定义
- 确保派生的类实现至少是来自抽象类(C )的两种方法之一
- 具有抽象工厂的派生类的 C++11 单例
- 派生类仍然是抽象的
- 抽象类的需求是什么?为什么要通过其基类访问派生类方法?在C++
- 为什么抽象派生类需要初始化虚拟基类?
- 抽象派生类