そこで、クラスで作成した ADT 用にオーバーロードされた代入演算子のこれら 2 つのバージョンを作成しました。同じ ADT に対してオーバーロードされた ostream << 演算子と組み合わせて使用すると、異なる結果が表示されます。なんで?この問題が発生しているのは、メモリを他のバッファに割り当て解除したためですか?
void Text::operator= (const Text &other) {
if (this != &other) {
delete [] buffer;
bufferSize = other.bufferSize;
buffer = new char[bufferSize + 1];
strcpy(buffer, other.buffer);
}
}
void Text::operator= (const Text &other) {
if (this != &other) {
delete [] buffer;
bufferSize = other.bufferSize;
buffer = new char[bufferSize + 1];
for (int i = 0; i < bufferSize; i++) {
buffer[i] = other.buffer[i];
}
}
これが私のオーバーロードされた ostream <<,
ostream & operator << (ostream &output, const Text &outputText) {
output << outputText.buffer;
return output;
}
不一致は次のように発生します。
最初の出力は次のとおりです。Hey Jude
2 つ目の出力は次のとおりです。Hey Jude(random garbage)