3.5.5 定义拷贝构造函数(3)

2013-10-07 15:31:10 · 作者: · 浏览: 76

3.5.5   定义拷贝构造函数(3)

定义

 

将使用我们自己设计的拷贝构造函数,它并非简单地将d1的数据成员拷贝到d2的数据成员,而是确保d1.p和d2.p指向不同的存储区域,虽然两块存储区域中保存着相同的字符串(见图3-5)。

在程序清单3-7中设计的拷贝构造函数如下所示:

 


 
图3-5   d1.p与d2.p指向包含相同内容的不同存储区域
它首先设置指针p为0,然后调用如下的私有成员函数copyIntoP完成具体工作:
 
由于p已设置为0,代码
 


不发挥实际作用。如果d.p不为0,我们动态分配足够的存储区域,并将区域地址赋给p。该区域足以容纳d.p所指向的区域中的全部内容,然后我们将d.p所指区域中的数据拷贝到新分配的存储区域中。如果d.p为0,则拷贝对象没有拥有保存字符串的存储区域。我们将p和size设置为0,表示无法拷贝数据。

通过上述方式,我们自己设计的拷贝构造函数确保源对象和新对象拥有内容相同的不同存储区域,这一点是编译器生成的拷贝构造函数所办不到的(见图3-5)。