构造函数
默认构造函数和复制构造函数
复制构造函数一般不用写,编译器会自动生成。
在这种情况下使用
string name = “sfsf”;
string tmp = name ;//使用复制构造函数
也可string tmp(name);
如果重载了=
string name = “sfsf”;
string tmp = name ;//使用复制构造函数
string name2 = “sfsf”;
string tmp2;
tmp2= name ;//使用重载=函数
但是如果类中有指针类型的成员数据,则必须自己重新写 复制构造函数和赋值函数,因为默认的复制构造函数和赋值函数只是简单的复制,对于指针他们只是复制了指针的地址,这样导致了两个对象内部的指针变量公用同一个内存空间,会出现内存泄漏,非法指针等许多问题。
如下:
class Test
{
char* str;
Test(const& Test a)
{
str = new char[strlen(a.str)+1];
strcpy(str, a.str);
}
Test& operator=(const Test& a)
{
str = new char[strlen(a.str)+1];
strcpy(str, a.str);
return (*this);
}
}
当然也可以将复制构造函数和赋值函数声明为private,禁止他人调用,这时就不能用=了,同时对private的复制构造函数和赋值函数不用提供具体的实现,链接器不会去寻找它们的实现。