19、对象的构造(下)

    两个特殊的构造函数:

无参构造函数:没有参数的构造函数。

拷贝构造函数:参数为 const class_name& (当前类对象) 的构造函数。

无参构造函数,当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空。函数体为空,则类中最少有一个无参构造函数。

       注意:只有在没有任何构造函数时,才提供默认构造函数。

拷贝构造函数,当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制。

拷贝构造函数的意义:兼容c语言的初始化方式,初始化行为能够符合预期的逻辑。

 浅拷贝:拷贝后对象的物理状态相同。(指针本身,指针相同的话可能会释放两次)

 深拷贝:拷贝后对象的逻辑状态相同。(指针所指向的值赋值,指针本身是不一样的)

     编译器提供的拷贝构造函数只进行浅拷贝。

Test(const Test& t)

{     i=t.i;

      j=t.j;

     p=new int;   // p, *p 是t2的成员

     *p=*t.p;   }

Test t2=t1;  // t1 替换上边的 t

什么时候需要深拷贝?

    对象中的成员指代了系统中的资源:成员指代了动态内存空间,成员打开了外存中的文件,成员使用了系统中的网络端口。

一般性原则:自定义拷贝构造函数,必然需要实现深拷贝。

IntArray::IntArray(const IntArray& obj)
{
m_length=obj.m_length;
m_pointer=new int[obj.m_length];
for(int i=0;i<obj.m_length;i++)
{
m_pointer[i]=obj.m_pointer[i];
}

}


猜你喜欢

转载自blog.csdn.net/ws857707645/article/details/80197541