如何深抄无号长

How to deep copy unsigned long

本文关键字:何深抄      更新时间:2023-10-16

我有这个类

typedef unsigned long Item;
class Stack
{
private:
    enum { MAX = 10} ;   
    Item  * pitems;     
    int size;           
    int top;         
public:
    Stack(int n = 10);  
    Stack(const Stack & st);
};

如何对Item进行深度复制?这样对吗?

pitems = st.pitems;
Stack::Stack(const Stack & st){
size = st.size;
pitems = new Item[size + 1];
pitems = st.pitems;
top = st.top;}

遍历并复制它们,而不是复制其他类的指针。

Stack::Stack(const Stack &st)
{
    this->size      = st.size;
    this->top       = st.top;
    this->pitems    = new Item[this->size + 1];
    for (auto i = 0; i < this->size; ++i)
    {
        pitems[i] = st.pitems[i];
    }
}

如前所述,当前存在内存泄漏

不,您需要遍历旧数组中的每个项,并为新数组创建新的副本。

for(int i = 0; i != size; ++i)
{
    pitems[i] = st.pitems[i]; //Assuming you have an equals operator for Item
}

绝对不要使用pitems = st.pitems;,因为这会泄漏您用new Item[size + 1]创建的新数组