2、重载赋值操作符

  赋值操作符以this(隐藏)和同类型对象的const引用作为形参。返回对同类型的引用。通常一个类定义复制构造函数的同时需要定义赋值操作符。

  a、在赋值之前,需要释放当前对象的资源,否则会形成内存泄露;又因为如此,在这之前需要判断传入的参数和当前对象是否是同一个实例,否则delete时会造成严重错误。

String& String::operator=(const String& other)
{
if(this == &other)
{
return *this;
}
delete[] m_data;
int length = strlen(other.m_data);
m_data  = new char[lenght+1];
if(m_data != NULL)
{
strcpy(m_data,other.m_data);
}
return *this;
}
//可能有更好更安全的实现,以后再说

  3、析构函数

  a、销对象时会调用析构函数。对于动态分配的对象,只有指向该对象的指针被删除时才撤销。析构函数通常释放在构造函数或在对象生命周期内获取的资源;

  b、默认析构函数(编译器总会生成),它按成员在类中声明的次序的逆序撤销成员(非static)。但默认析构函数不删除指针指向的对象;

  c、析构函数没有返回值,没有形参,所以不能重载它。

String::~String()
{
delete [] mdata;
}

  后记:通常这三个复制控制成员中我们定义一个,则它也需要定义另外两个 ,即所谓的“rule of three”。