この投稿を読んでいたのですが、C++ 代入演算子で割り当てられたメモリを削除する必要があるのはなぜですか? 代入演算子内の新しい操作によって割り当てられたメモリについて質問がありました。MyString オブジェクト testObject に割り当てた後、どのように解放されるのでしょうか? 範囲外になったときに testObject のデストラクタが呼び出されますか、それともメモリを解放するために明示的に delete を呼び出す必要がありますか?
const MyString& operator=(const MyString& rhs)
{
if (this != &rhs) {
delete[] this->str; // Why is this required?
this->str = new char[strlen(rhs.str) + 1]; // allocate new memory
strcpy(this->str, rhs.str); // copy characters
this->length = rhs.length; // copy length
}
return *this; // return self-reference so cascaded assignment works
}