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