我正在阅读这篇文章为什么我们需要在 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
}