C++中对象的复制就如同“*”,用一个已有的对象快速地复制出多个完全相同的对象。一般而言,以下三种情况都会使用到对象的复制:
(1)建立一个新对象,并用另一个同类的已有对象对新对象进行初始化,例如:
class Rect
{
private:
int width;
int height;
};
Rect rect1;
Rect rect2(rect1); // 使用rect1初始化rect2,此时会进行对象的复制
(2)当函数的参数为类的对象时,这时调用此函数时使用的是值传递,也会产生对象的复制,例如:
void fun1(Rect rect)
{
...
}
int main()
{
Rect rect1;
fun1(rect1); // 此时会进行对象的复制
return 0;
}
(3)函数的返回值是类的对象时,在函数调用结束时,需要将函数中的对象复制一个临时对象并传给改函数的调用处,例如:
Rect fun2()
{
Rect rect;
return rect;
}
int main()
{
Rect rect1;
rect1=fun2();
// 在fun2返回对象时,会执行对象复制,复制出一临时对象,
// 然后将此临时对象“赋值”给rect1
return 0;
}
对象的复制都是通过一种特殊的构造函数来完成的,这种特殊的构造函数就是拷贝构造函数(copy constructor,也叫复制构造函数)。拷贝构造函数在大多数情况下都很简单,甚至在我们都不知道它存在的情况下也能很好发挥作用,但是在一些特殊情况下,特别是在对象里有动态成员的时候,就需要我们特别小心地处理拷贝构造函数了。
点赞 (1)
回复