所以我寫了這兩個版本的重載賦值運算符,用於在課堂上寫的ADT。當我將它們與我的超載ostream < <運算符一起用於同一個ADT時,我會看到不同的結果。爲什麼?是否因爲我將內存釋放到了我正在接受此問題的其他緩衝區?在C++中,這兩個函數的區別是什麼?
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
第二個輸出:Hey Jude(random garbage)
在這種情況下,你如何設置bufferSize? – slugonamission
閱讀關於複製和交換成語, – PiotrNycz