1,如果在构造函数中使用new来初始化对象的指针成员时,应在析构函数中使用delete
2 ,new和delete要兼容。new对应与delete new[]对应与delete[]
3, 如果有多个构造函数,则必须以相同的方式使用new 要么都带括号,要么都不带,因为只有一个析构函数,因此所有的构造方法要兼容。不过可以在一个构造函数中使用new来初始化指针,而在另一个构造函数中将指针初始化为空(null或者0)这是应为delete可以用于空指针
4,应定义一个复制构造函数,通过深度复制函数将一个对象初始化为另一个对象,通常这种构造函数与下面类似
String::String(const String & st)
{
len =st.len;
str= new char[len +1];
std::strcpy(str,st.str0:
}
5具体的说,复制构造函数应分配足够的空间来存储复制的数据,并复制数据,而不仅仅是数据的地址,还更新所有的受影响的静态类成员
6,应当定义一个赋值操作符,通过深度复制将一个对象复制给另一个对象,通常与下面类似
String & String::operator =(const String &str)
{
if(this ==&str) return *this;
delete [] this->str;
len =str.len;
this->str =new char[len+1];
std::strcpy(this->str,str.str);
return * this;
}