如何深层复制unsigned long

时间:2015-09-04 05:31:32

标签: c++

我有这个班级

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;}

2 个答案:

答案 0 :(得分:3)

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

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];
    }
}

如前面的评论所述,您目前有内存泄漏。

答案 1 :(得分:2)

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

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]

制作的新数组