// 忽略了给自己赋值的情况
// 的赋值运算符
string& string::operator=(const string& rhs)
{
delete [] data; // delete old memory
{
// 检查对自己赋值的情况
if (this == &rhs) return *this;
在没有判断自己给自己赋值的时候,释放以前的内存时,重新分配,再将原来的数据COPY过来,但是此是原来的数据被释放掉了,这样就丢失了数据,新分配的内存里的数据是不确定的。
// 的赋值运算符
string& string::operator=(const string& rhs)
{
delete [] data; // delete old memory
// 分配新内存,将rhs的值拷贝给它
data = new char[strlen(rhs.data) + 1];
strcpy(data, rhs.data);
return *this; // see item 15
}
c& c::operator=(const c& rhs)
{
// 检查对自己赋值的情况
if (this == &rhs) return *this;
...
在没有判断自己给自己赋值的时候,释放以前的内存时,重新分配,再将原来的数据COPY过来,但是此是原来的数据被释放掉了,这样就丢失了数据,新分配的内存里的数据是不确定的。