构造函数语法:类名(){}
1.构造函数,没有返回值也不写void
2.函数名与类名相同
3.构造函数可以有参数,因此可以发生重载
4.程序在调用对象时会自动调用构造函数,无需手动
析构函数语法:~类名(){}
1.析构函数,没有返回值也不写void
2.函数名称与类名相同,在名称前加~
3.析构函数不可以有参数,因此不能发生重载
4.程序在对象销毁前会自动调用析构函数,无需手动
构造函数的分类和调用
分类:有参构造函数 、无参构造函数
普通构造函数、拷贝构造函数
调用:
1.括号法
ps:调用默认构造函数时,不要加(),编译器会认为是函数声明,不会认为是创建对象
2.显示法
ps:等号右边是匿名对象,当前行执行后,系统会回收匿名对象
不要利用拷贝构造函数初始化匿名对象,编译器会认为是“重定义”==对象声明
3.隐式转换法
ps:编译器会自动转化为显示法
//拷贝构造函数
类名 (const 类名 &a)
{
//拷贝内容
}
拷贝构造函数调用时机:
1.使用一个已经创建完毕的对象来初始化一个新对象
2.值传递的方式给函数参数传值
3.值方式返回局部对象
构造函数的调用规则:
1.构造一个类,C++编译器会至少提供3个函数:
默认构造函数(空实现)、析构函数(空实现)、拷贝构造函数(值拷贝)
2.我们写了有参构造函数,编译器就不再提供默认构造函数,仍会提供拷贝构造函数
3.我们写了拷贝构造函数,编译器就不再提供其他函数
深拷贝与浅拷贝:
编译器所进行的拷贝是浅拷贝
浅拷贝所带来的问题就是堆区内存的重复释放
深拷贝重新在堆区开辟内存空间
ps:在堆区开辟内存空间后要用析构函数手动删除这部分空间
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)