我有这个班级
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;}
答案 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]