zoukankan      html  css  js  c++  java
  • 值返回和指针返回简说

    值返回和指针返回简说 - Shell909090 - 随笔杂记

    值返回和指针返回简说

    好吧,这是常识,我说快点。
    C ﹡ c = get_c();
    这是指针返回。
    C c = get_c():
    这是值返回。
    指针返回的缺点是,你必须检测返回指针的有效性,也就是NULL。并且,你需要手工管理指针释放。而优点则是避免了值拷贝,还有可以返回空值,即通过返回NULL表示没有值的情况。
    而引用返回最大的优势在于,变量的生存周期和作用域相同,你无需管理释放问题。然而缺陷就是庞大的拷贝开销。
    在get_c返回的时候,会return一个对象。这个对象是子函数作用域对象(sub function scope),会随着子函数退出而失效。因此,在返回值的时候会引发拷贝。这种拷贝有两种可能。
    1. 拷贝构造
    当返回值被用于某个对象的声明时,会触发拷贝构造函数。被返回的对象会作为拷贝构造参数传递(引用传递),而拷贝出的对象就是被生成对象。
    2. 赋值算子
    即operator =。当对某个已经声明对象进行赋值时,会发生这种现象。
    当然,近代编译器对于“在返回时进行构造用于返回后的构造”这种情况做了优化,通称RVO优化。例如上文,如果get_c中使用return C(a, b);进行返回,实际上只有C::C(a, b)的调用,而没有C::C(const C & c)的调用。
  • 相关阅读:
    15.5.3 【Task实现细节】状态机的结构
    JavaWeb-EL的11个内置对象
    JavaWeb-EL入门
    JavaWeb-BeanUtils
    JavaWeb-JavaBean
    JavaWeb-JSP动作标签
    JavaWeb-include和taglib指令
    JavaWeb-pageContext对象
    JavaWeb-page指令
    JavaWeb-URL重写
  • 原文地址:https://www.cnblogs.com/lexus/p/2456062.html
Copyright © 2011-2022 走看看