我有使用我的赋值操作符指针的麻烦,它不会创建新的qeueu,而是新的数组指向旧的。因此,当我在新队列中删除旧队列中的值时,这些值会发生变化。使用赋值运算符的队列深层副本
首先,我可以看到我的副本构造函数没有在我的main函数中调用,原因不明,但问题可能与此有关。
我的一些用来说明问题的主要代码:
aQueue.enqueue(10);
aQueue.enqueue(20);
Queue<int> cQueue = aQueue;
cout << "aQueue: "; aQueue.printQeueue(2, 0);
cout << "cQueue: "; cQueue.printQeueue(3, 0);
cQueue.dequeue();
cout << "aQueue: "; aQueue.printQeueue(4, 1);
cout << "cQueue: "; cQueue.printQeueue(5, 1);
system("pause 4");
这就是问题的开始,如果我排队aQueue 10和20,然后分配cQueue到aQueue,如果我打印aQueue结果是:10 20.之后,出队cQueue并打印aQueue,结果是:-179016023。如果我打印cQueue,结果是:20,因为它应该是。
这里紧跟使用的功能直接或间接:
template <typename T>
T Queue<T>::dequeue(){
T temp = front();
Node *old = fronten;
fronten = fronten->next;
delete old;
return temp;
}
template <typename T>
Queue<T>::Queue(const T &rhs){
Node *tempfront = rhs.fronten;
while (tempfront.fronten!=rhs.back){
enqueue(tempfront);
tempfront = tempfront->next;
}
}
template <typename T>
void Queue<T>::enqueue(const T& item){
if (isEmpty()){
back = fronten = new Node(item);
}
else
back = back->next = new Node(item);
}
Node(const T &theElement, Node *n = nullptr): element(theElement), next(n) {};
请贴,编译 – 4pie0 2014-09-28 17:23:54
你没有队列副本构造函数完整的例子,你的模板 队列 ::队列(常量T&右)是构造函数队列从类型它存储 –
4pie0
2014-09-28 17:26:50
@ 0d0a现在你失去了我,但它听起来像它使感觉。那么我应该如何定义我的拷贝机? – Prolle 2014-09-28 17:34:56