簡體   English   中英

帶有抽象類指針的對象的C ++副本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM