引用和拷贝构造函数

引用就像能自动地被编译器间接引用的常量型指针。它通常用于函数的参数表中和函数的返回值,但也可以独立使用。

使用引用时有一定的规则:
1.当引用被创建时,它必须被初始化(指针则可以在任何时候被初始化)。
2.一旦一个引用被初始化为指向一个对象,它就不能改变为另一个对象的引用(指针则可以在任何时候指向另一个对象)。
3.不可能有NULL引用。必须确保引用是和一块合法的存储单元关联。

      最经常看见引用的地方是在函数参数和返回值中。当引用被做函数参数时,在函数内任何对引用的更改将对函数外的参数产生改变。如果从函数中返回一个引用,必须像从函数中返回一个指针一样对待。当函数返回时,无论引用关联的是什么都应该存在,否则,将不知道指向哪一个内存。

参数传递准则:
传值方式需要调用构造函数和析构函数,然而如果不想改变参数,则可通过常量引用传递,它仅需要将地址压栈。

仅当准备用按值传递的方式传递类对象时,才需要拷贝构造函数。如果不那么做时,就不需要拷贝构造函数。
声明一个私有的拷贝构造函数可以防止通过按值传递。

指针引用:
如果想改变指针本身而不是它所指向的内容,可以把函数参数变成指针的引用,用不着取得指针的地址。

void increment (int*& i) { i++; }

 

这样,指针本身增加了,而不是它指向的内容增加了。

因为拷贝构造函数实现按值传递方式的参数传递和返回,所以在简单结构情况下,编译器将有效地创建一个默认拷贝构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值