[英]Vector of shared_ptr of a abstract bass class pointing to derived classes
[英]Copy vector of shared_ptr to derived classes of abstract base
我正在嘗試將派生類的 object 實例從vector<shared_ptr<base>>
復制到新的vector<shared_ptr<base>>
,其中基礎 class 是抽象的。 我希望新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。 我怎樣才能正確地做到這一點?
解決此問題的一種方法是在基礎 class 上創建一個純虛擬克隆方法,該方法返回一個指針 - 子類覆蓋它以分配自己的副本。
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));
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.