对象:内存单元+资源
定义:开辟内存,产物为变量
生成:1.开辟空间
2.调用构造函数(给开辟的内存初始化)
销毁:1.调用析构函数(释放资源)
2.释放空间
类中的六个默认函数:析构函数、构造函数、拷贝构造函数、赋值运算符重载函数、取地址操作符的重载函数、const修饰的求地址符重载函数
1.构造函数(实现初始化,与类名相同)
作用:给对象所占的内存初始化(赋资源)
特点:1.可以重载
2.不依赖对象调用,不可以手动调用
CLink()
{
phead=new NOde();
phead->next=NULL();
}
int main()
{
CLink cl;//1.开辟空间 2.系统调用不带参数的构造函数
cl.show();
cl.destroyed();
return 0;
}Clink(int size)//个数 带参的构造函数
{
phead = new Node();
phead->next=NULL;
for(int i=0;i<10;i++)
{
insertHead(0);
}
}系统提供的构造函数为空函数,不带参数
Clink()
{
}
2.析构函数(与destroyed作用相同,函数名与类名相同)
特点:1.不可重载
2.依赖对象的调用,手动调用析构函数-->退化成普通函数的调用(可能会造成重复释放)
作用:释放除栈以外的其他资源
系统提供的函数特点:1.public 2.inline(代码展开后为空函数)
this指针:this指向对象所占的空间
3.拷贝构造函数
String str1("hello");
String str2 = str1; //==> String str2(str1);
作用:已存在的对象来生成相同类型的新对象
String(const String& rhs)
{
mptr = new char[strlen(rhs.mptr) + 1]();
strcpy_s(mptr, strlen(rhs.mptr) + 1, rhs.mptr);
}特点:1.形参一定要是引用(递归调用拷贝构造函数生成形参对象,最终递归调用导致栈溢出)
2.默认的拷贝构造函数是一个浅拷贝(类成员变量有指针类型,考虑是否实现深拷贝)
默认的拷贝构造函数
String str1("hello");
String str2=str1;
String(const String& rhs)
{
mptr = rhs.mptr;
}

str2先释放,str1变为野指针
浅拷贝与深拷贝
浅拷贝:赋值。如果有指针,两个指针指向相同的内存
深拷贝:开辟独立内存(资源独立)。如果有指针,两个指针拥有各自的内存
4.赋值运算符的重载函数
作用:拿一个已存在的对象给另一个相同类型的已存在对象赋值
void operator=(const String& rhs)
{
if (this == &rhs)//处理自赋值情况
{
return;
}
delete[] mptr;
mptr = new char[strlen(rhs.mptr) + 1]();
strcpy_s(mptr, strlen(rhs.mptr) + 1, rhs.mptr);
}实现步骤:
1.自赋值处理
2.释放旧资源
3.开辟新资源
4.赋值
特点:默认赋值运算符重载函数也是浅拷贝