template<class T>
void chainList<T>::output(ostream& out) const
{// Put the list into the stream out.
for (chain<T>* currentNode = firstNode;
currentNode != NULL;
currentNode = currentNode->next)
out << currentNode->element << " ";
}
template<class T>
ostream& operator<<(ostream& out, chainList<T>x)
{
x.output(out);
return out;
}
...
int main()
{
...
cout << my << endl;
cout << my << endl;
...
}
メイン関数では、両側が連続的に出力され、2番目のパスの出力は文字化けしてエラーになります。
戸惑い、データをチェックして、これがコピーコンストラクタのポットであるかもしれないことを見つけてください。
オブジェクトが仮パラメーターとして渡されると、関数は実際のパラメーターと同じオブジェクトを一時的にコピーします。コピーコンストラクターが定義されていないため、デフォルトのコピーコンストラクターのみを使用できます。関数の最後では、ローカル変数は破棄されます。仮パラメーターは単純にコピーされるため、それらも破壊され、これにより、繰り返し破壊されるリスクが発生します。
メソッドを避ける
可能な限り参照を使用できるため、一時的にローカル変数を作成する必要がなく、時間と時間を節約
できます。また、コピーコンストラクターを上書きすることで解決できます。
template<class T>
chainList<T>::chainList(const chainList<T>&theList)
{
size=theList.size;
略
}