首页 > 其他分享 >Item21:当你返回一个对象时,不要试图返回一个引用

Item21:当你返回一个对象时,不要试图返回一个引用

时间:2024-04-02 11:56:30浏览次数:18  
标签:返回 不要 对象 Item21 一个 引用

芝士wa
2024.4.2
Item21链接


“无论何时只要你看到一个引用声明,你应该立刻问自己它是什么东西的另一个名字,因为它必定是某物的另一个名字”

如果函数返回一个引用,它必须返回某个已存在的对象的引用。

一个函数创建一个新对象只有两种方法:在栈上或者在堆上。

  • 栈上的生成物是局部变量,任何返回一个引向局部对象的引用的函数都是错误的。
  • 堆上的创建需要申请空间,这很容易导致内存泄漏。

此外,无论是在栈上还是在堆上创建对象并返回引用,都不能避免一次构造函数的调用。

直接返回值就好了。


“绝对不要返回一个局部栈对象 指针或引用,绝对不要返回一个堆的引用,绝对不要返回一个局部静态对象的指针或引用”

标签:返回,不要,对象,Item21,一个,引用
From: https://www.cnblogs.com/cheese-wa/p/18110270

相关文章

  • Item20:用传const引用取代传值
    芝士wa2024.4.2Item20链接“缺省情况下,C++以传值的方式将对象传入或传出函数,这种传递方式会带来昂贵的代价。”举例分析:classPerson{public:Person();//parametersomittedforsimplicityvirtual~Person();......
  • Java 8 新特性:Lambda 表达式、方法引用和 Stream 流
    函数式接口具有单个抽象方法的接口被称为“函数式接口”,函数式接口的实例被称为“函数对象”,表示函数和要采取的动作。六大基础函数式接口:函数式接口名称用途方法Consumer<T>消费型接口操作类型T的对象voidaccept(Tt)Supplier<T>供给型接口返回类型为T......
  • 身份证实名认证接口会返回什么?javascript身份核验接口示例
    身份证实名认证接口是通过核验身份证号、姓名、证件头像等一系列的要素信息进行用户身份验证,那么,身份证实名认证接口一般在核验完成后会返回什么参数信息呢?下面翔云API小编为大家答疑解惑!一般情况下,身份核验只会返回一致或者不一致的结果,不一致的情况下会返回那些参数不一致,以翔......
  • C++ 引用传递 超级详细 小白也行
    一.引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。(本名和小名共用一块地址)例如:就像是给你取小名,本名小名都是你,所有作用也都一样。 类型&引用变量名(对象名)=引用实体(如图下)......
  • [C++11]右值引用
    阅读导览:通过左值、右值的基础概念来引出左值引用和右值引用知道左值引用和右值引用后,先了解他们为什么能实现(底层原理)熟悉了解左值引用的优点和缺陷并给出疑问,进而引出右值引用出现的意义以及如何解决左值引用的疑问最后从多个方面再次了解右值引用基础概念右值、左值......
  • web前端之页面逐渐呈现代码功能、对象数据如何获取下一个值、创建元素并添加id与类名
    MENU前言style(全部代码)JavaScript(核心代码)html(基本代码)前言1、效果演示以视频为准,暂未录视频(敬请期待);2、私信或微信可获取完整代码(WX:MJ682517)style(全部代码)*{margin:0;padding:0;box-sizing:border-box;}::-webkit-scrol......
  • 万能引用
    右值引用用&&符号表示。右值引用主要是绑定到右值上,如:int&&rv=100;看下面函数定义:voidmyfunc(int&&tmprv){cout<<tmprv<<endl;return;}intmain(){myfunc(10);//正确,右值作为实参inti=100;myfunc(i);//错误,右值引用不能接受左值......
  • LInux: fork()究竟是如何工作的?为何一个变量能够接受两个返回值?
    LInux:fork函数究竟是如何工作的?为何一个变量能够接受两个返回值?前言一、fork()用法二、fork()应用实例展示三、fork()工作原理3.1为什么要创建子进程?3.2fork()究竟干了些什么?3.3fork为什么会存在两个返回值?3.5为何fork函数中父进程返回子进程的pid、子进程返回0?3.......
  • 前端面试手写题目|编写一个函数,实现对象深拷贝,递归引用,日期,正则symbol健。手写Object.
    快速,选择,希尔45,编写一个函数,实现对象深拷贝,并解决递归引用,日期,正则表达式,对象中含有symbol健等问题。functiondeepCopy(obj,cache=newWeakMap()){if(obj==null||typeofobj!=='object'){r......
  • 实验报告( 重载,引用,指针,交换,字符串的连接 )
       一、实验目的:掌握函数重载的使用方法深入理解指针的概念,掌握指针的使用方法理解引用的概念,掌握引用作为函数参数的使用方法二、实验仪器或设备:微型计算机三、总体设计(设计原理、设计方案及流程等)实验内容:1、设计一组重载函数add(),至少包括:charadd(char,int);......