学习笔记内容来自:狄泰软件学院 唐佐林老师 的视频,十分感谢您的指导
特殊的构造函数
无参构造函数
当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且函数体为空
拷贝构造函数
当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制
所以,下列定义的类并不是空的,因为有隐藏的默认提供的无参构造函数和拷贝构造函数
class Test{};
初始化和赋值
在C++中,初始化和赋值不一样,初始化会触发构造函数,而赋值不会
拷贝构造函数
1.格式:claas_name(const class_name& another){}
2.意义:兼容C语言的初始化方式
拷贝构造函数中的深拷贝和浅拷贝
1.浅拷贝:拷贝后对象的物理状态相同
2.深拷贝:拷贝后对象的逻辑状态相同
PS:编译器提供的拷贝构造函数只进行浅拷贝
什么时候需要进行深拷贝
1.对象中有成员指代了系统中的资源
2.成员指向了动态内存空间
3.成员打开了外存中的文件
4.成员使用了系统中的端口
5…
示例程序:
class Array
{
private:
int* m_data;
int m_length;
public:
Array()
{
data = new int[5];
}
Array(const Array& another)
{
/*
* 浅拷贝:
* this->m_data = another.m_data;
* this->length = another.length;
*
* 深拷贝:
*
* this->m_data = new int[5];
* this->length = another.length;
*/
}
~Array()
{
delete[] this->m_data;
}
};
不进行深拷贝的话,析构的时候会发生重复释放同一片内存空间,会段错误
来源:CSDN
作者:苏瓜皮
链接:https://blog.csdn.net/u012321968/article/details/104450358