[英]C++ copies of objects with abstract class pointers
考慮一下Container
類,它基本上存儲了Box
對象的unique_ptr
的向量,並且可以對它們執行一些計算。
class Container
{
private:
std::vector<std::unique_ptr<Box> > boxes_;
public:
Container(std::vector<std::unique_ptr<Box> > &&boxes): boxes_(std::move(boxes)){}
double TotalVolume() { /* Iterate over this->boxes_ and sum */ }
};
這里, Box
是一個抽象類,它有一個純虛方法,如double Box::Volume()
。
現在,假設我在主程序中實例化一個容器:
std::vector<std::unique_ptr<Box> > x;
x.push_back(std::move(std::unique_ptr<Box>(new SquareBox(1.0)));
x.push_back(std::move(std::unique_ptr<Box>(new RectangularBox(1.0, 2.0, 3.0)));
Container c(x);
我如何制作c
副本? 我想要一個函數,在boxes_
中boxes_
底層Box
對象的boxes_
,但我認為用基類做這個很難嗎?
制作副本的一種方法是在基類中使用“復制”虛擬方法。 此方法將創建當前對象的副本並返回指向它的(唯一)指針。 如果類中有任何包含的指針,它們也需要創建新副本(深層副本)。
存在其他方法。 例如,您可以測試向量中的每個對象以確定其類型(使用dynamic_cast
),但這是丑陋,低效且非常容易出錯的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.