剑指offer的面试题,赋值运算符函数


class CMyString
{public:CMyString(char*pData=nullptr);CMyString(const CMyString&str);~CMyString(void);private:char*m_pData;}

 

如上为类型Cmystring的声明,请为该类型添加赋值运算符函数。

class CMyString
{
public:CMyString(char* pData = nullptr);CMyString(const CMyString& str);~CMyString(void);// 添加赋值运算符函数声明CMyString& operator=(const CMyString& str);private:char* m_pData;
};
CMyString& CMyString::operator=(const CMyString& str)
{// 检查自赋值if (this == &str)return *this;// 删除原有的数据delete[] m_pData;// 如果传入的字符串为空,则将 m_pData 设为 nullptrif (str.m_pData == nullptr){m_pData = nullptr;}else{// 分配新的内存并复制数据size_t length = strlen(str.m_pData);m_pData = new char[length + 1];strcpy(m_pData, str.m_pData);}// 返回当前对象的引用return *this;
}

这个实现考虑了以下几点:

  1. 自赋值检查:防止对象赋值给自身时出现问题。
  2. 删除原有数据:释放当前对象已分配的内存,防止内存泄漏。
  3. 处理空指针情况:如果传入的对象的 m_pData 为 nullptr,则将当前对象的 m_pData 也设为 nullptr。
  4. 分配新内存并复制数据:为新的字符串分配内存,并复制数据。
  5. 返回 *this:允许连续赋值操作,如 a = b = c。

注意:这个实现假设 CMyString 的构造函数和析构函数已正确实现,特别是析构函数应该使用 delete[] 来释放 m_pData。

你可能还想考虑实现移动赋值运算符(C++11及以后版本支持),以提高效率

CMyString& operator=(CMyString&& str) noexcept
{if (this != &str){delete[] m_pData;m_pData = str.m_pData;str.m_pData = nullptr;}return *this;
}

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

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

相关文章

C#港澳台通行证识别接口、台胞证识别、ocr证件识别

在这个快节奏的时代,效率至上,每一秒都弥足珍贵。想象一下,无需手动输入繁琐的证件信息,仅需轻轻一扫,证面上所有文字信息便可呈现在眼前将是多么的便利,这得益于文字识别技术衍生下的-证件识别接口&#x…

基于单片机控制的变压器油压油温故障检测

摘 要 在电力系统的运行中,通过对其核心设备变压器的故障进行检测,以此能够及时、准确的发现变压器的故障,基于单片机控制的变压器油压油温的故障检测的方法,利用压力传感器、温度传感器对变压器的油压、油温进行采集并送入单片机…

vCenter 错误提示 “目标主机上的vmotion接口未配置”

vCenter 错误提示 “目标主机上的vmotion接口未配置” VMware 使用 vCenter 迁移 虚拟机报错 “目标主机上的 vMotion 接口未配置”,配置启用 vMotion 的步骤如下: (END)

【CentOS7】解决 CentOS 7 使用 `yum` 时出现的错误

解决 CentOS 7 使用 yum 时出现的错误 问题 在使用 yum 进行各种操作时(例如 Plesk 更新、系统更新、软件包安装等),可能会出现以下错误: Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86…

Spring Bean 循环依赖

在Spring框架中,Bean的创建和管理是其核心功能之一。然而,在复杂的应用系统中,Bean之间可能会形成循环依赖(Circular Dependency),这种情况如果不加以妥善处理,将会导致Spring容器在初始化时抛出…

leetcode3098. 求出所有子序列的能量和

官解 class Solution(object):# 定义常量mod int(1e9 7) # 模数,用于防止结果溢出inf float(inf) # 无穷大,用于初始化时的特殊值def sumOfPowers(self, nums, k):n len(nums) # 数组长度res 0 # 用于存储最终结果# 三维动态规划表,…

Nacos-2.4.0最新版本docker镜像,本人亲自制作,部署十分方便,兼容postgresql最新版本17和16,奉献给大家了

基于Postgresql数据库存储的nacos最新版本2.4.0,采用docker镜像安装方式 因业务需要,为了让nacos支持postgresql,特意花了两天时间修改了源码,然后制作了docker镜像,如果你也在找支持postgresql的nacos最新版本,恭喜你,你来的正好~ nacos-2.4.0 postgresql的数据库脚本…

C#中的new以及类

new关键字的用法 实例化对象:使用 new 关键字可以创建一个类的实例。例如: ​ MyClass obj new MyClass(); 指定构造函数:如果类有多个构造函数,可以使用 new 关键字指定使用哪一个构造函数来创建对象。例如: ​ MyC…

Apache SeaTunnel快速入门及原理和实践(一)

一、概述 主要从以下6个方面进行: 对数据集成做一个简单的概括对 SeaTunnel 做简单的介绍介绍 SeaTunnel 当前的原理和架构演进对当前市面上一些比较常见的数据集成工具进行对比,来解读一下现在市面上已经有了那么多数据集成工具,为什么我们…

Django Web框架——01

目录 文章目录 目录 Django框架的介绍起源&现状Django的安装 创建Django项目创建项目的指令Django项目的目录结构settings.py 文件介绍 URL 介绍URL定义Django如何处理一个URL对应的请求视图函数(view) Django 路由配置path() 函数path转换器 re_path()函数 HTTP协议的请求…

CoAP——Libcoap安装和使用(Ubuntu22.04)

1、简介 CoAP(Constrained Application Protocol)是一种专为受限设备和网络设计的应用层协议。它类似于HTTP,但具有更轻量级的特性,适合用于物联网(IoT)环境中的低功耗和低带宽设备。Libcoap是一个轻量级的…

云计算实训12——配置web服务器、配置客户端服务器、配置DNS服务、实现DNS域名解析

一、配置web服务器 准备操作 首先在正式配置之前需要做以下操作 关闭防火墙 systemctl stop firewalld 永久关闭防火墙 systemctl disable firewalld 关闭selinux setenforce 0 永久关闭selinux vim /etc/selinux/config selinuxpermissive 还需要保证能够正常ping通www.bai…

什么是 JSON文件

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它独立于语言,易于人阅读和编写,同时也易于机器解析和生成。JSON基于JavaScript的对象字面量语法,但是它作为一种数据格式,并不仅…

【SpingCloud】客户端与服务端负载均衡机制,微服务负载均衡NacosLoadBalancer, 拓展:OSI七层网络模型

客户端与服务端负载均衡机制 可能有第一次听说集群和负载均衡,所以呢,我们先来做一个介绍,然后再聊服务端与客户端的负载均衡区别。 集群与负载均衡 负载均衡是基于集群的,如果没有集群,则没有负载均衡这一个说法。 …

有哪些好用的 AI 学术研究工具和科研工具?

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ AI 应用其实分两个层面,第一是模型,第二是应用。现在很多模型厂家都是既做 toC 的对话应用,也做 t…

GD 32 流水灯

前言: 通过后面的学习掌握了一些逻辑架构的知识,通过复习的方式将学到的裸机任务架构的知识运用起来,同时巩固前面学到的知识,GPIO的配置等。 开发板上LED引脚使用示意图 注:此次LED灯的点亮凡是是高电平点亮&#xff…

python中利用pickle模块保存格式化数据

有时候需要保存复杂的格式化的数据,比如保存一个字典,这就可以用pickle模块进行保存。 pickle模块简介 pickle模块是python专用的持久化模块,可以持久化保存包括自定义数据在内的各种数据,适合python本身复杂数据的保存。 具体…

Error和Exception区别

Error类型的错误通常为虚拟机相关错误,如系统崩溃,内存不足,堆栈溢出等,编译器不会对这类错误进行检测,JAVA应用程序也不对这类错误进行捕获,一旦这类错误发生,通常应用程序会被终止,仅靠应用程序本身无法恢复; Exception 类的错误是可以在应用程序中进行捕获并处理的…

数学建模(6)——预测类模型目录

预测模型是一类通过分析和建模历史数据来预测未来结果的算法或模型。这些模型广泛应用于各种领域,包括金融、医疗、市场营销、气象、制造业等。以下是一些常见的预测模型: 1. 回归模型 线性回归(Linear Regression):…

好用的电脑屏幕监控软件推荐,什么软件能够监控电脑?

在当今信息化时代,电脑屏幕监控软件成为了企业管理、家长监管以及教育培训等领域的必备工具。通过实时监控电脑屏幕,这类软件可以有效提高工作效率,防止信息泄露,保障网络安全。本文将详细盘点几款主流的电脑屏幕监控软件&#xf…