首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我应该使用指针而不是对象本身

我发现使用 C++ 的人经常用指针表示对象,比如像下面这样: Object *myObject = new Object; 而不是, Object myObject; 或者在调用成员函数的时候,都会这样...: myObject->testFunc(); 而不是, myObject.testFunc(); 我有点想不明白为什么这么做?...是出于效率方面么? 回答 对于现代 C++ (尤其是 C++ 11 之后),大量使用 new 动态分配是不明智的选择。 下面从两个方面来解释: 什么时候该使用 new? 什么时候该使用指针?...你需要延长对象生命周期。 意思是说你想一直使用某个地址位置的变量,而不是它的副本,对于后者,我们更应该使用 Object myObject; 的语法。 你需要很多内存。...切片的意思就是说:在函数传参处理多态变量时,如果一个派生类对象在向上转换(upcast),用的是传值的方式,而不是指针和引用,那么,这个派生类对象在 upcast 以后,将会被 slice 成基类对象,

1.4K10

【JS】332- 为什么我更喜欢对象而不是 switch 语句

在本文中我将重点介绍第三种方式 (我更为喜欢的方法),即使用对象进行快速地查找。...使用布尔值 我喜欢创建返回类型一致的值的函数, 但是, 由于 javascript 是动态类型语言,因此可能存在函数可能返回动态类型的情况,因此我将在此示例中考虑这一点,如果找不到键,我将创建一个返回布尔值...我认为我们应该更关心为什么我们需要一个返回布尔值,未定义值或字符串的函数,这里存在严重的不一致性,无论如何,对于这样一个非常棘手的情况这也只是一个可能的解决方案。...当没有太多情况需要处理时,对象方法可能比 switch 语句的速度要慢,这可能是因为我们正在创建一个数据结构,然后接收一个键,然而在 switch 中,我们只是检查值并返回值。...其实,很多情况下我们可以利用对象与其他组合搭配写出更为高效或可维护的代码。当然,如何去灵活地使用对象去处理一些对应的情况,还是靠我们自己。好的,这篇就总结到这了,不知道对你们有什么启发。

1.3K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    我是怎样教媳妇面向对象编程的

    Berard 妻子:你是指软件开发说明书会被不断修改? 丈夫:非常正确!软件开发唯一的真理是“软件必然修改”。为什么? 要知道,你的软件解决的是现实世界中的问题,而现实生活不是一成不变的。...这就像我能够穿上衣服,而对我的身体不做任何改变,哈哈。 妻子: 太有意思啦. 你可以通过穿不同的衣服来改变你的外貌, 但是你不必为此改变自己的身体.所以你是对扩展开放的, 对吧? 丈夫: 是的....妻子: 对不起, 这听起来让我觉得有点乱. 我认为这个是面向对象编程的基本原则. 这个叫做多态性, 对吧? 为什么面向对象设计原则需要考虑这个问题? 丈夫: 非常好的问题....如果这两种电视机提供同样的功能,你会选择哪一种? 妻子:当然是第二种了。作者:嗯,但是为什么呢? 妻子:因为我不需要看起来很麻烦而且对我也不必要的开关和按钮。 丈夫:正确。...接口隔离原则确保接口实现自己的职责,且清晰明确,易于理解,具有可复用性。 妻子:我明白了,你的意思是接口只应该包括必要的方法而不是所有的。 作者:是的,让我们看一个例子。

    81080

    为什么我写不出面向对象的代码

    我们从哲学上来说:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。...这样我们下代码存数据的时候就是添加List而不是Json了。...我认为基于领域驱动的设计更符合面向对象设计的原则,当我们接触到需求的第一步就需要考虑领域模型,而不是将其切割成数据和行为,然后数据用数据库实现,行为使用服务实现,最后造成需求的首肢分离。...因此我总结为什么人们更愿意使用贫血模型呢: “ 充血模型相对贫血模型存在一定的设计难度,你需要多花时间思考哪些是对象本身的行为 面向过程的编程思想根深蒂固,很难改变 对代码没有太大负责态度,认为怎么简单怎么来...在复杂的系统中,我们使用贫血模型(面向过程思维)开发,那最后的结果是 点连成线,线交织成网,密密麻麻不可维护 然而我们大部分负责的系统并不复杂,我的建议是: 朝充血模型思维方式靠齐 我的思考 如果你还在抱怨自己的工作只是简单

    1.2K20

    为什么 Vue 中的 data 属性是一个函数而不是一个对象?

    在 Vue.js 中,data 属性通常是一个函数而不是一个对象,这是为了确保每个组件实例都有独立的数据副本。以下是详细解释:1....确保数据隔离如果 data 是一个对象,那么所有组件实例将共享同一个数据对象。这会导致数据污染和意外的副作用。...使用函数确保独立性通过将 data 定义为一个函数并返回一个对象,Vue 可以确保每个组件实例都有自己的数据副本。这样可以避免数据污染和意外的副作用。...这样可以确保每次创建新实例时都生成新的数据对象,而不会影响其他实例。4....总结将 data 定义为一个函数而不是一个对象,可以确保每个组件实例都有独立的数据副本,从而避免数据污染和意外的副作用,同时提高性能。

    6000

    是否还在疑惑Vue.js中组件的data为什么是函数类型而不是对象类型

    分析Vue.js组件中的data为何是函数类型而非对象类型 引言 正文 一、Vue.js中data的使用 二、data为对象类型 三、data为函数 结束语 引言 要理解本篇文章,必须具备JavaScript...这是因为这两个实例对象在创建时,是先获得了一个函数,将该函数的返回值作为了自己属性data的值,并且这两个实例对象中data的值在栈中对应的堆中的地址也不一样,所以他们不会互相影响。...因为我们刚开始定义了构造函数Vue时,给他内部的data设置了一个值,该值为对象类型,对象类型在js中称为引用数据类型,在栈中是存储着一个指向内存中该对象的堆中的地址。...所以我们在使用复用型组件时,申明data属性的值时,必须要使用函数类型,因为每次创建实例对象时,他们都是获取属于他们自己的一个对象值,并且对应的堆中的地址都不相同,所以互不影响。...因为本文也是说到构造函数创建实例对象的概念,如果对于JavaScript中对象的概念不理解的话,也可以翻阅我之前写的一篇文章,全面剖析了js中的对象概念——充分了解JavaScript中的对象,顺便弄懂你一直不明白的原型和原型链

    3.5K30

    框架篇-Vue面试题1-为什么 vue 组件中的 data 是函数而不是对象

    在vue组件中data的属性值是函数,如下所示 export default { data() { // data是一个函数,data: function() {}的简写 return...// data是一个对象 name: 'itclanCoder', }, }; 当一个组件被定义,data必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例 也就是说,在很多页面中...,定义的组件可以复用在多个页面 如果data是一个纯碎的对象,则所有的实例将共享引用同一份data数据对象,无论在哪个组件实例中修改data,都会影响到所有的组件实例 如果data是函数,每次创建一个新实例后...; p1.data.name = '川川'; console.log(p1.data.name); // 川川 console.log(p1.data.name); // 川川 挂载在原型下属性如果是一个对象...,实例化出来的对象(p1,p2)都指向的是同一份实体 原型下的属性相当于是公有的 修改一个实例对象下的属性,也会造成另一个实例属性跟着改变,这样在组件复用的时候,肯定是不行的,那么改成函数就可以了的,如下代码所示

    1.9K20

    我以为,前端的精髓是学会分析与思考,而不是js语句

    今天我在跟同学们讲课,讲到做轮播图的时候,脑子里突然蹦出一句话,“学js学前端,是学习用程序、用机器的思维方式来解决现实当中的问题,而不是学这几十上百条的js语句”。...现在放空脑子想想,前端开发是做什么?它并不是一个做网页的,虽然这个职位看起来和做起来,都是一个做网页的。...我口语化的描述一下,这个职位它实际上是把人们在现实生活当中的需求,放到网上来给它实现了,是做线下需求网络化的。这是我的个人主观的想法。 以前是线下买东西,线下排队看病挂号,线下排队买票看电影,。。。...,它在我眼里是一台发动机的“剖面图”; // 而当我面对一个网站的时候,它在我眼里就是一整台运行中的发动机。...这是我眼中,我心中的前端开发。 前端开发为什么叫前端?就是因为它用肉眼能看到。后端开发为啥叫后端?因为它肉眼看不到。所以前端开发也可以放在可视化开发的大范畴里。

    1.1K70

    关于现代包管理器的深度思考——为什么现在我更推荐 pnpm 而不是 npmyarn?

    接着,从 npm3 开始,包括 yarn,都着手来通过扁平化依赖的方式来解决这个问题。相信大家都有这样的体验,我明明就装个 express,为什么 node_modules里面多了这么多东西? ?...这就是为什么会产生依赖结构的不确定问题,也是 lock 文件诞生的原因,无论是package-lock.json(npm 5.x才出现)还是yarn.lock,都是为了保证 install 之后都产生确定的...版本的 C,而 A 当中用的还是 C 当中旧版的 API,可能就直接报错了。...如果是自己的业务代码还好,试想一下如果是给很多开发者用的工具包,那危害就非常严重了。...注意,使用的是硬链接,而不是软链接。如: pnpm link ../..

    3.1K20

    关注数据而不是模型:我是如何赢得吴恩达首届 Data-centric AI 竞赛的

    这次竞赛共有489个参赛个人和团队提交了2458个独特的数据集。仅仅通过改进数据(而不是模型架构,这是硬标准),许多参赛者能够将64.4%的基准性能提高20%以上。...这场竞赛真正的独特之处在于,与传统的 AI 竞赛不同,它严格关注如何改进数据而不是模型,从我个人的经验来看,这通常是改进人工智能系统的最佳方式。...此外,我们还获得了一本包含 52 张图像的标签簿,作为我们自己实验的小测试集,本标签簿不用于最终评估。...2 我的“数据增强”技术解决方案 在进入解决方案的关键部分之前,我做的第一件事是遵循固定标签和删除不良数据的常见做法。...我最初使用这个电子表格来识别标记错误的图像和明显不是罗马数字 1-10 的图像(例如,在原始训练集中就有一个心脏图像)。 现在我们来看看“数据增强”技术。

    68340

    WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口

    当我们对 Window 类型写一个附加属性的时候,在属性变更通知中我们需要判断依赖对象是否是一个窗口。但是,如果直接判断是否是 Window 类型,那么在设计器中这个属性的设置就会直接出现异常。...return; } 我在这些博客中使用过这样的判断方法,可以参见源码: 流畅设计 Fluent Design System 中的光照效果 RevealBrush,WPF 也能模拟实现啦!...不过,如果我们希望得到更多的设计器支持,而不是像上面那样直接 return 导致此属性在设计器中一点效果都没有的话,我们需要进行更精确的判断。...{ /// /// 判断一个依赖对象是否是设计时的 。...} else if (d is Window) { // 检测到真的是窗口,做一些真实窗口初始化需要做的事情。 } else { // 这不是一个窗口,需要抛出异常。

    34540

    我是这样学会了Python中的类与对象知识,网上没有看到这种见解

    但对于初学者来说,仍然是一个非常难以理解的事情。今天我尝试从一个奇怪的角度讲解使用类、对象相关知识。...本文需要读者已经了解 Python 中关于 列表、字典、自定义函数基本认知 ---- 物以类聚 每当我学习一个新的工具,都会自问:"为什么我需要他?"...假设我需要3位学生的相关数据(姓名、年龄、成绩),那么首先想到的可能是用列表表示。...而执行函数需要函数对象后用括号。 因此 s2'show_me' 相当于 show_me(s2) 最后,把创建学生信息字典的过程统一为一个函数: 完美!...这类似于 字典对象[属性名字] ---- 别以为我是随意使用字典来类别这些概念: 自定义类型的定义决定了实体的结构。

    80020

    java学习之路:33.自定义类对象转json字符串(记录我是如何从一无所知到最后的了解)

    以前对json没有概念,今天老师给了我一道题,题目是这样的: 写一个工具类,有两个方法,一个是输入类对象,输出类对象的json字符串,还有一个是输入json字符串和对象类型,输出类对象。...下一步我开始研究题目,我把这里的输入类对象理解为json对象,结果老师告诉我是任意类,乍一看确实有点懵,老师说这里的类以是person类,car类,或者集合类,说实话,一看到集合类就懵了,因为我还没有学习集合类...为什么是红色的??? ?...,回想一下,可能百度方法不一,用错了,而且解决问题也不像百度上面那么复杂,只需要添加包的时候选择添加外部包,而不是内部包,这个问题即可解决: ?...版本,对,不出意外,还是提示异常,我又开始查看自己的jdk版本,发现是最新的10,于是反过来想一想,我解决不了fastjson版本问题,我的jdk又是最新的,那么我降低我jdk试一试!!

    2.6K31

    【19】进大厂必须掌握的面试题-50个React面试

    浏览器只能读取JavaScript对象,而不能读取普通JavaScript对象中的JSX。...但是在语法上存在一些差异,例如: 事件使用驼峰式大小写而不是仅使用小写字母命名。 事件是作为函数而不是字符串传递的。 事件参数包含一组特定于事件的属性。...它们通过回收DOM中的所有现有元素来帮助React优化渲染。这些键必须是唯一的数字或字符串,React只能使用这些数字或字符串对元素进行重新排序,而不是重新渲染它们。这导致应用程序性能的提高。...因此,所有组件的状态都存储在商店中,它们从商店本身接收更新。单一状态树使跟踪随时间变化以及调试或检查应用程序变得更加容易。 39.列出Redux的组件。...Redux由以下组件组成: 行动–这是一个描述发生了什么的对象。 减速器–一个确定状态如何变化的地方。 商店–整个应用程序的状态/对象树保存在商店中。

    11.2K30

    如何快速有效的成长为一名Java架构师?我总结出了以下几点。第一:提醒自己还有多少没有学习第二: 不要试图证明自己是正确的第三: “代码有效性”不是停下来的地方,而是开始的地方第四 :写三遍第五:要有

    要知道,“我知道全都会”会阻碍我们学习新东西,这种输出强大的确定性叫靠谱。 第二: 不要试图证明自己是正确的 要变得强大,不仅仅是好,你必须从经验中学习成长。...软件开发新手和许多经验丰富的开发者都喜欢自己的代码,即使自己写测试,也证明自己的代码毫无缺陷。而真正优秀的程序员会主动寻找可能会出错的地方,他们知道最终用户会发现程序员遗漏的缺陷。...以上课程体系是我总结出来并且是比较全面的Java架构师必学的课程题系图,此图分为六大板块,每个专题每个知识点都对应着我们平常在工作中用到的技术要点,如果你们想提升自己的技术,想学习以上的技术要点,你们可以加群获取...也许刚开始时你会觉得有些枯燥,因为它不是文学诗歌,慢慢你会看到别人如何在编程中解决问题,他们将其视为教训与挑战。为了能让自己更好,我们不妨问问自己这样的一些问题: 1、如果是我怎样编写这段程序?...第九:学习技术而不是工具 编程语言,工具和方法林林总总,这就是为什么尽可能的学更多的语言和框架来获得不同体验的原因。专注于编程基础,因为基本的东西永远不会发生变化;比编程更深刻的是要注重架构。

    54730

    进阶|Chrome还不够神,但你写的扩展程序可以很神

    一般在网页中用  或者 标签声明的部分,就要靠插件来渲染。 开发自己的扩展程序 OK,简单了解完什么是扩展程序后,下面我们来看看如何开发一款扩展程序。...当然,首先我们要搞清楚为什么我们需要扩展程序,它有什么作用呢? 就我而言,最近我开发了一款简单的扩展程序 —— URLHelper 。...你可以在 chrome 应用商店下载到它: 开发它的原因是因为,在我们的业务开发中,开发过程经常需要面对超长的 URL,带有 N 多个参数,它可能长这样: 不是开玩笑,真实情况可能比这个还长。...可以将 content script 看作是网页的一部分,而不是它所在的扩展程序的一部分。...扩展程序的消息传递 消息传递存在的必要性是因为内容脚本在网页而不是扩展程序的环境中运行,所以它们通常需要某种方式与扩展程序的其余部分通信。

    1.1K20

    初学者观察者模式

    观察者模式是一种广泛使用的行为设计模式。它允许对象订阅并接收关于它们正在观察的对象发生的事件的更新。思考一个在线服装商店的例子。你想要一件特定的连帽衫,但目前缺货。你每天都会检查网站以查看是否有货。...商店提供产品再次有货时的提醒,因此你订阅接收通知。这消除了手动检查商店的需求。这类问题通常使用观察者模式解决。...观察者模式主要有两个角色:可观察者或发布者观察者或订阅者在上面的例子中,可观察者是你正在寻找的产品,而你是观察者。可观察者模式背后的关键概念是松耦合,可观察者和观察者不需要了解彼此的具体细节。...在上面的例子中,你已经解耦了自己不必每天手动检查商店,商店也只在相关更改时通知你。思维模型以下是观察者模式的思维模型:可观察者这是正在被观察的对象。它维护一个观察者列表。...它提供订阅、取消订阅和通知观察者的方法。观察者这是对可观察对象状态变化感兴趣的对象。它订阅可观察对象以接收更新。它有一个在可观察对象状态改变时被调用的更新方法。可以有多个观察者。

    10900

    【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序

    一般在网页中用  或者 标签声明的部分,就要靠插件来渲染。 开发自己的扩展程序 OK,简单了解完什么是扩展程序后,下面我们来看看如何开发一款扩展程序。...当然,首先我们要搞清楚为什么我们需要扩展程序,它有什么作用呢? 就我而言,最近我开发了一款简单的扩展程序 —— URLHelper 。你可以在 chrome 应用商店下载到它: ?...关于扩展程序的相关文档,可以看看这些文章: 建立 Chrome 扩展程序 扩展开发文档 首先,我觉得最重要的,是要了解整个扩展程序的基本架构,有几个非常重要的文件: Content scripts...可以将 content script 看作是网页的一部分,而不是它所在的扩展程序的一部分。...扩展程序的消息传递 消息传递存在的必要性是因为内容脚本在网页而不是扩展程序的环境中运行,所以它们通常需要某种方式与扩展程序的其余部分通信。

    2.4K30

    软件架构预述

    这篇文章是软件架构编年史(译)的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。...最后,自己做出选择,是实现一种已知的解决方案,还是创造适合自己的特定问题的独特设计。 有些架构风格号称是所有形式的软件的“银弹”。然而,优秀的设计这应该选择最符合解决特定问题需要的风格。...如果我把它当成领域概念,我指的就是领域内的金钱概念,但如果我涉及的是这个类中的功能性方面时,我指的就是值对象的技术特性(没有ID、可以是不变的等等)。...应用(Application) 我将面向用户的代码即 UI 视为应用,它建立在组件之上。例如,我们可以基于一组组件构建网络商店。...架构(Architecture) 软件架构的简单定义有很多,我觉得都不错,但我认为理解它是什么很简单,而更重要的是,定义架构的产出,它应该给项目带来什么。

    35030
    领券