【发布时间】:2011-07-17 08:11:58
【问题描述】:
为什么我们需要删除语句?
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
}
【问题讨论】:
-
问题本身和
copy-constructor标签不适合代码 - 它是一个复制赋值运算符。 -
不直接相关,但
delete[] this->str; this->length = rhs.length; this->str = new char[this->length]; strcpy(this->str, rhs.str);可能会避免对strlen的不必要调用(当然,假设this->length == strlen(this->str)由您的实现保证。) -
简单的答案是你不知道。但我确信真正的答案与我们没有看到的类的其余设计有关。但这是一个非常糟糕的赋值运算符。
-
这段代码取自关于复制赋值运算符的教程。
标签: c++