簡體   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