String::String(const String &other) //拷贝构造函数
{
cout << "自定义拷贝构造函数" << endl;
int length = strlen(other.m_data);
m_data = new char[length + 1];
strcpy(m_data, other.m_data);
}
String & String::operator=(const String &other) //赋值函数
{
cout << "自定义赋值函数" << endl;
if (this == &other)
{ return *this; }
else
{
delete [] m_data;
int length = strlen(other.m_data);
m_data = new char[length + 1];
strcpy(m_data, other.m_data); return *this;
}
}
//////////////////////////////////////////////////////////////////////
1. 调用环境
(1)当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数:
对象作为实参传入到函数形参
对象以值传递的方式从函数返回
一个对象需要通过另外一个对象进行初始化。
(2)operator=();是把一个对象赋值给一个原有的对象,所以如果原来的对象中有内存分配要先把内存释放掉,而且还要检查一下两个对象是不是同一个对象,如果是的话就不做任何操作。