私は練習のためだけにスタックを実装しています。だから、メインでは、私はこのような何かを持っている:割り当てオペレータは、「空の」インスタンスを返してはなりません。
Stack stack;
stack.push(element1;
stack.push(element2);
Stack copy;
copy = stack;
私は新しい要素インスタンスを生成したいので、だから私はまた、代入演算子をオーバーロードしています(とちょうど1から各要素のポインタをコピーしません
Stack &Stack::operator=(const Stack &toCopy) {
Stack* stack = new Stack;
if (toCopy.first == NULL) return *stack;
for (Node* actual = toCopy.first; actual != NULL; actual = actual->sig) {
stack->push(actual->elem);
}
// In this state, *stack has 2 elements as it should
return *stack;
}
メインでは、コピー変数は変更を取得していません...割り当てが行われていないかのようにまだ空です。あたかも私がしていたかのようにStack copy;
ここで何が起こっているのか説明できますか?
なぜdownvoteですか? – jscherman
メモリ管理に関するいくつかの基本的な誤解があるようです。あなたの 'operator ='はメモリをリークします( 'new Stack'は決して' delete'dされません)。また、 '* this'を更新することはなく、代わりに新しいスタックを更新し、新しいスタックでは何もしません。あなたが投稿しなかったコードの他の部分にはおそらく多くのエラーがあります。将来、[MCVE](http://stackoverflow.com/help/mcve)を投稿すると、生のポインタの使用をやめたほうがはるかに簡単になります。 –
'operator ='で 'this'を修正し、新しいスタックを返さないようにしてください。 – Ryan