C++深层复制矢量指针对象
C++ Deep Copy Vector Pointer Object
我有一个名为Heap的类,它是指向HeapItem对象的指针向量
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*>
的包装器,因此您可以为此类定义复制构造函数,用于处理所需的深度复制:
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
}
正如Chris所指出的,一个可能的修改是,如果前者是一个多态类,则使用HeapItem
的clone()
方法——参见这个答案的评论。
此外,您可以定义复制分配(如果您希望能够将一个现有Heap
分配给另一个),并且您肯定希望定义析构函数以确保在Heap
对象的生命周期结束时正确释放内存。
您还可以将Heap
定义为模板类,以便能够使用 HeapItem
的类型对其进行参数化。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它