Sal*_*kes 4 c++ abstract-class pointers copy-constructor
考虑这个Container类,它基本上存储了一个由unique_ptrs 个Box对象组成的向量,并且可以对它们执行一些计算。
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 */ }
};
Run Code Online (Sandbox Code Playgroud)
这里,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);
Run Code Online (Sandbox Code Playgroud)
我如何制作副本c?我想要一个在 中制作底层Box对象副本的函数boxes_,但我认为使用基类很难做到这一点?
制作副本的一种方法是在基类中使用“复制”虚拟方法。此方法将创建当前对象的副本并返回指向它的(唯一)指针。如果类中有任何包含的指针,则它们还需要创建新副本(深层副本)。
存在其他方法。例如,您可以测试向量中的每个对象以确定其类型(使用dynamic_cast),但这是丑陋的、低效的并且非常容易出错。
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |