赋值运算符重载

背景:

在EHR模块进行调试时,发现QVector3D对象进行赋值时,出现变量未赋值成功问题。

问题描述:

在进行代码调试时,发现赋值操作未成功,导致代码逻辑异常,经过分析,发现QVector3D 赋值重载函数存在问题,返回一个临时对象,从而导致赋值失败。

const QVector3D operator=(const QVector3D& in) const {return QVector3D(in.p[0], in.p[1], in.p[2]);
}

问题解决:

重写赋值重载函数:

QVector3D& operator=(const QVector3D& in) {if (this != &in) { // 防止自我赋值p[0] = in.p[0];p[1] = in.p[1];p[2] = in.p[2];}return *this; // 返回当前对象的引用
}

代码测试正常:

QVector3D a(1.0f, 2.0f, 3.0f);
QVector3D b;
QVector3D c;b = a; // b 被正确赋值
c = b = a; // 赋值链式调用成功

这样,bc 都会被正确赋值,因为 operator= 返回的是对当前对象的引用,而不是一个新的对象。这样不仅符合 C++ 的语义,而且避免了不必要的性能开销和潜在的内存管理问题。

如果 operator= 返回一个新的 QVector3D 对象而不是 *this 的引用,将会导致一些问题,主要体现在以下几个方面:

  1. 违背了赋值运算符的语义:

    1. 按照惯例,赋值运算符应该返回对左值对象(即被赋值的对象)的引用。这允许赋值操作可以链式调用,例如 a = b = c;

    2. 返回一个新的对象会导致这种链式调用的行为不正确。

  2. 效率问题:

    1. 每次调用赋值运算符时都创建一个新的对象会引入不必要的开销。通常,赋值运算符直接修改已有对象,避免了创建和销毁临时对象的开销。

  3. 潜在的内存管理问题:

    1. 如果类中涉及动态内存管理,返回一个新的对象可能会导致内存泄漏或双重释放,因为赋值运算符应该直接操作已有对象,而不是创建新的对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/433952.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前台项目启动/打包报错 Error: error:0308010C:digital envelope routines::unsupported

在package.json中修改启动/打包语句 如图,我这里是打包时候报错,就在build里前面加上 set NODE_OPTIONS--openssl-legacy-provider && 再次打包,成功。

828华为云征文|部署敏捷项目管理系统工具 ZenTao

828华为云征文|部署敏捷项目管理系统工具 ZenTao 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 ZenTao3.1 ZenTao 介绍3.2 ZenTao 部署3.3 ZenTao 使用 四、总…

急!现在转大模型还来得及吗?零基础入门到精通,收藏这一篇就够了

大模型的出现,让行内和行外大多数人都感到非常焦虑。 行外很多人想了解却感到无从下手,行内很多人苦于没有硬件条件无法尝试。想转大模型方向,相关的招聘虽然层出不穷,但一般都要求有大模型经验。而更多的人,则一直处…

中国科学技术大学《2020年+2021年845自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《25届中国科学技术大学845自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2020年真题 2021年真题 Part1:2020年2021年完整版真题 2020年真…

【论文解读】ECCV2018细粒度分类:自监督机制NTS-Net模型引领新方向 (附论文地址)

论文地址:https://arxiv.org/pdf/1809.00287 这篇论文由北京大学机器感知国家重点实验室的Ze Yang、Tiange Luo、Dong Wang、Zhiqiang Hu、Jun Gao和Liwei Wang撰写,发表于2018年。论文提出了一种新颖的自监督机制,用于在没有边界框/部分注释…

如果再回到从前——备忘录模式

文章目录 如果再回到从前——备忘录模式如果再给我一次机会……游戏存进度备忘录模式备忘录模式基本代码游戏进度备忘 如果再回到从前——备忘录模式 如果再给我一次机会…… 时间:5月6日18点  地点:小菜、大鸟住所的客厅  人物:小菜、…

VSCode开发Vue3+TS项目中遇到各种波浪线(诊断信息)

一、问题汇总 在使用Visual Studio Code(VSCode)开发Vue3 TypeScript项目时,会遇到各种波浪线错误(诊断信息),这些问题或错误通常由以下几人原因引起的: 1.1 常见问题 1、typeScript配置问题…

计算机的错误计算(一百零六)

摘要 探讨含有变元负的整数次方的多项式的计算精度问题。 计算机的错误计算(一百零五)给出了一个传统多项式的错误计算案例;本节探讨含有变元负的整数次方的多项式的计算精度问题。 例1. 已知 计算 若在Python下计算,则有&…

Pencils Protocol上线 Vaults 产品,为 $DAPP 深入赋能

Pencils Protocol 是 Scroll 生态一站式综合收益平台,该平台以 DeFi 功能作为抓手,基于 Farming、Vaults、Auction 等功能不断向 LRT、LaunchPad、AI、FHE、RWA 等领域深入的拓展。 近期 Pencils Protocol 生态不断迎来重磅进展,一个是 $DAPP…

【Java】类型转换 —— 自动转换、强制转换与表达式类型自动提升

1.自动类型转换 Java中的自动类型转换就好比将小瓶水倒入到大瓶的换装过程。我们将小瓶水倒入到大瓶中时,由于小瓶的容量比大瓶的容量小,所以倒入的水永远不可能溢出大瓶。同样,在Java中,将取值范围小的数据类型的变量…

Django 配置邮箱服务,实现发送信息到指定邮箱

一、这里以qq邮箱为例,打开qq邮箱的SMTP服务 二、django项目目录设置setting.py 文件 setting.py 添加如下内容: # 发送邮件相关配置 EMAIL_BACKEND django.core.mail.backends.smtp.EmailBackend EMAIL_USE_TLS True EMAIL_HOST smtp.qq.com EMAIL…

2024新版IDEA创建JSP项目

1. 创建项目 依次点击file->new->Project 配置如下信息并点击create创建项目 2. 配置Web项目 点击file->Project Structure 在点击Project Settings->Module右键右边模块名称->ADD->Web 点击Create Artifact 出现如下界面就表示配置完毕,…

基于PHP+MySQL组合开发地方门户分类信息网站源码系统 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网技术的飞速发展,地方门户分类信息网站逐渐成为城市生活不可或缺的一部分。它们涵盖了房产、招聘、二手交易、生活服务等多个领域,为当地居民提供了全方位的信息服务。为了满足这一市场需求,我们开发了这款基于PHPMySQL的…

videojs 播放mp4视频只有声音没有画面问题

在使用Video.js播放MP4视频时,如果遇到只有声音没有画面的情况,这通常与视频文件的编码格式、浏览器兼容性或Video.js的配置有关。以下是一些可能的解决步骤和原因分析: 1. 检查视频编码 MP4视频支持多种编码格式,但并非所有编码…

【移植】一种快速移植OpenHarmony Linux内核的方法

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 移植概述 本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开…

旺店通ERP集成金蝶K3(旺店通主供应链)

源系统成集云目标系统 金蝶K3介绍 金蝶K3是一款ERP软件,它集成了供应链管理、财务管理、人力资源管理、客户关系管理、办公自动化、商业分析、移动商务、集成接口及行业插件等业务管理组件。以成本管理为目标,计划与流程控制为主线,通过对成…

Battery management system (BMS)

电池管理系统(BMS)是一种专门用于监督电池组的技术,电池组由电池单元组成,在电气上按照行x列矩阵配置进行排列,以便在预期的负载场景下,在一段时间内提供目标范围的电压和电流。 文章目录 电池管理系统是如…

数据分析工具julius ai如何使用

什么是julius ai Julius AI 是一款强大的ai数据分析工具。用户可以使用excel、数据库、文本文件等多种格式的数据,Julius AI 会自动分析这些数据并提供详细的解释和可视化图表。官网显示它目前已经有三十万用户。它也支持手机版。 虽然openai也支持生成图表&#xf…

开放原子开源基金会OPENATOM

AtomGit_开放原子开源基金会代码托管平台-AtomGit 开放原子开源基金会是致力于推动全球开源事业发展的非营利机构,于 2020 年 6 月在北京成立,由阿里巴巴、百度、华为、浪潮、360、腾讯、招商银行等多家龙头科技企业联合发起。 精选项目: 比…

PPT 快捷键使用、技巧

前言: 本文操作是以office 2021为基础的,仅供参考;不同版本office 的 ppt 快捷键 以及对应功能会有差异,需要实践出真知。 shift 移动 水平/垂直 移动 ; shift 放大/缩小 等比例放大 缩小 ; 正圆 正…