关于C++中值传递和引用传递的总结
作者:网络转载 发布时间:[ 2013/12/26 14:29:02 ] 推荐标签:开发 函数
缺省情况下C++以值传递方式传递对象到函数。除非你另外指定,否则函数参数都是以实际参数的复件(副本)为初值,而调用端所获得的亦是函数返回值得一个副本。这些复件由copy构造函数产生,会造成昂贵的费时操作。举个单一类(不存在继承关系)的例子,在函数以值方式传递对象,并要求返回对象时,对象会调用两次拷贝构造函数,分别是在实参赋值形参和返回对象时进行调用。因为函数内部参数在内存栈中进行分配,所以当函数返回时,会至少调用一次析构函数来回收资源。
拷贝构造函数在以下情况下会被调用:
1. 当用类的一个对象去初始化类的另一个对象时。
2. 如果函数的形参是类的对象,调用函数时,进行形参和实参的结合时。
3. 如果函数的返回值是类的对象,函数执行完成返回调用者时。
所谓引用只是个名称,代表某个既有对象,任何时候看到一个引用声明,都应该立刻确定真正指代的是那个对象。
使用传递引用的调用方式,将没有任何构造函数和析构函数被调用,因为没有任何新对象被创建。同时将引用声明为const,可以保证传递的对象不会被函数修改。在C++底层引用往往以指针实现出来,因此传递引用通常意味着传递指针(传递引用可以解决派生类被当做基类数据切割(调用基类的成员或函数)的问题)。但如果你的对象属内置类型,传值往往比传引用更有效率。
函数创建新对象的途径有二,即在堆和栈空间进行创建。在函数内部声明的对象,在栈中进行创建。函数返回时对象会自动销毁,若此时将对象返回给引用,引用会指向一个不确定的地址。这时我们考虑在堆中进行分配空间,使用new进行对象的生成,然后返回对象的引用。此时我们需要注意另一个问题,即谁该对你new出来的对象进行delete。总结一句:必须返回对象是,不要试图返回其引用。所以,一个必须返回对象的函数的正确写法是:让那个函数返回一个新对象。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11