繁体   English   中英

C ++深度复制矢量指针对象

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

克里斯指出的一种可能的修改是,如果前者是多态类,则使用HeapItemclone()方法-请参阅对此答案的注释。

另外,您可能会定义副本分配(如果您希望能够将一个现有的Heap分配给另Heap ),并且您肯定要定义析构函数,以确保在Heap对象的寿命结束时可以正确释放内存。

您还可以将Heap定义为模板类,以便可以使用HeapItem的类型HeapItem进行参数HeapItem

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM