1.拷贝构造函数书写:
Person(const Person &p)
{
m_age=p.m_age;
cout<<"Person拷贝构造函数调用"<
2.拷贝构造函数调用时机:
a.使用一个已经创建完毕的对象来初始化一个新对象
Person p1(20);
Person p2(p1);
b.值传递的方式给参数传值
void test(Person p) 注意改变p并不改变下面的p1
{
p.m_age=20;
}
Person p1;
test(p1);
c.值方式返回局部变量
3.构造函数调用规则:默认情况下,c++编译器会至少给一个类提供三个函数:
1.默认构造函数(无参,函数体为空)
2.默认析构函数(无参,函数体为空)
3.默认拷贝构造函数
如果用户定义有参构造函数,c++不再提供默认无参构造,但是会提供默认拷贝构造
如果用户定义拷贝构造函数,c++不再提供其他构造函数
4.浅拷贝:“=”赋值均为浅拷贝
深拷贝:
Person(int height)
{
m_height= new int(height); new int(int x)返回一个指针,指向在堆区创建的
一个新数据,该数据值为x
}
~Person()
{
if(m_height!=NULL)
{
delete m_height;
m_height=NULL;
}
}
int *m_height;
若浅拷贝则会导致堆区的内存重复释放
就要自己写拷贝函数,用深拷贝。
m_height=new int (*p.m_height);



