[英]C++ Deep Copy Vector Pointer Object
我有一个叫做Heap的类,它是指向HeapItem对象的指针的Vector
vector<HeapItem*> myHeap;
我想创建一个深堆的副本,以便可以删除副本中的所有项目而不会影响原始的堆。
例如:
OriginalHeap = new Heap();
OriginalHeap.Insert(HeapItem1);
OriginalHeap.Insert(HeapItem2);
OriginalHeap.Insert(HeapItem3);
CopyHeap = OriginalHeap;
CopyHeap.deleteMin();
print(OriginalHeap);
print(CopyHeap);
输出:
OriginalHeap = HeapItem1,HeapItem2,HeapItem3
CopyHeap = HeapItem2,HeapItem3
由于您引入了Heap类的概念,该概念是vector<HeapItem*>
的包装器, vector<HeapItem*>
您可以为此类定义复制构造函数,以实现所需的深度复制:
class Heap{
vector<HeapItem*> data;
public:
... // various constructors if needed
Heap(const Heap& h) {
data = new vector<HeapItem*>(h.size());
for (int i=0; i<h.size(); i++)
data[i] = new HeapItem(*h.data[i]); // if HeapItem supports copy construction
}
... // various member functions if needed
}
克里斯指出的一种可能的修改是,如果前者是多态类,则使用HeapItem
的clone()
方法-请参阅对此答案的注释。
另外,您可能会定义副本分配(如果您希望能够将一个现有的Heap
分配给另Heap
),并且您肯定要定义析构函数,以确保在Heap
对象的寿命结束时可以正确释放内存。
您还可以将Heap
定义为模板类,以便可以使用HeapItem
的类型HeapItem
进行参数HeapItem
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.