我有使用我的賦值操作符指針的麻煩,它不會創建新的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