cpp Copy Constructor 拷贝构造函数

Copy Constructions (拷贝构造)

拷贝构造:用一个对象初始化另一个同类对象

 

拷贝构造函数可以简写为 copy ctor,或者 cp ctor。在Unix/Linux中,拷贝文件的命令叫做 cp。

 

如何声明拷贝构造函数(copy ctor):

Circle (Circle&);

Circle (const Circle&);

 

调用拷贝ctor:

Circle c1( 5.0 );

Circle c2( c1 );    //c++03

Circle c3 = c1;     //c++03

Circle c4 = { c1 }; //c++11

Circle c5{ c1 };    //c++11

 

注意:拷贝构造函数只有一个参数,它的类型是当前类的引用,而且一般都是 const 引用。

1) 为什么必须是当前类的引用呢?

如果拷贝构造函数的参数不是当前类的引用,而是当前类的对象,那么在调用拷贝构造函数时,会将另外一个对象直接传递给形参,这本身就是一次拷贝,会再次调用拷贝构造函数,然后又将一个对象直接传递给了形参,将继续调用拷贝构造函数……这个过程会一直持续下去,没有尽头,陷入死循环。

只有当参数是当前类的引用时,才不会导致再次调用拷贝构造函数,这不仅是逻辑上的要求,也是 C++ 语法的要求。

2) 为什么是 const 引用呢?

拷贝构造函数的目的是用其它对象的数据来初始化当前对象,并没有期望更改其它对象的数据,添加 const 限制后,这个含义更加明确了。

另外一个原因是,添加 const 限制后,可以将 const 对象和非 const 对象传递给形参了,因为非 const 类型可以转换为 const 类型。如果没有 const 限制,就不能将 const 对象传递给形参,因为 const 类型不能转换为非 const 类型,这就意味着,不能使用 const 对象来初始化当前对象了。

posted @ 2022-12-06 23:21  blogzzt  阅读(63)  评论(0编辑  收藏  举报