剑指 offer set 27 赋值运算符函数
要求为类 CMyString 定义赋值运算符函数.
类的定义如下
class CMyString {
public:
CMyString(char* pData = NULL; )
CMyString(const CMyString &str);
~CMyString(void);
private:
char* m_pData;
};
在定义一个赋值运算符时, 需要考虑如下几点
1. 需要把返回值得类型声明定义为该类型的引用, 并且在函数结束前返回实例自身的引用 (*this). 只有返回引用才可以连续赋值
2. 需要把传入参数的类型声明为常量引用. 形参必须是引用, 否则会编译报错
3. 需要判断引入的实例是否是当前实例, 如果是同一个那么不进行赋值, 直接返回. 如果不事先判断就直接赋值, 那么在释放实例内存时就会出现严重的问题. 若传入实例释放了自己的内存, 并且 传入实例就是当前实例, 那么不仅没完成赋值, 当前实例也不完整了
4. 异常安全性. 先创建再复制, 代码如下
CMyString& CMyString::operator=(const CMyString &str) {
if(this != &str) {
CMyString strTemp(str);
swap(this->pData, str.m_pData)
}
return *this;
}
剑指 offer set 27 赋值运算符函数的更多相关文章
- 《剑指offer》 包含min函数的栈
本题来自<剑指offer> 包含min函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路: 举例子让抽象问题具体 ...
- 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值
剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...
- 剑指 Offer 30. 包含min函数的栈
剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...
- 力扣 - 剑指 Offer 30. 包含min函数的栈
题目 剑指 Offer 30. 包含min函数的栈 思路1 使用一个辅助栈min_stack,用来维护栈的最小的元素 每次添加元素入栈时候,data_stack和min_stack都要同时维护 dat ...
- 【剑指Offer】包含min函数的栈 解题报告
[剑指Offer]包含min函数的栈 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/beb5aa231adc45b ...
- 【剑指offer】27. 二叉树的镜像
剑指 Offer 27. 二叉树的镜像 知识点:二叉树:递归:栈 题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 示例 输入:root = [4,2,7,1,3,6,9] 输出:[4, ...
- 【剑指offer】包括min函数的栈
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26064213 剑指offer上的第21题,之前在Cracking the Coding i ...
- 【Java】 剑指offer(30) 包含min函数的栈
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min ...
- 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉 ...
随机推荐
- Android开发之帐户管理
android.accounts主要包括了集中式的帐户管理API, AccountManagerCallback, AccountManagerFuture, OnAccountsUpdateList ...
- ado.net 调用带参数的存储过程
String connString = "Data Source = localhost; Initial Catalog = hkjc;User ID = sa;Pwd = 123&quo ...
- 创建你的第一个Android PHP应用
google的开源移动操作系统Android给智能手机市场带来了风暴.不像Apple,对想要为水果市场(Iphone App Store)提供应用软件的开发者们有着严格的指导原则以及要求,Google ...
- 微信公众平台消息接口开发-封装weixin.class.php(转)
一.封装weixin.class.php 由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处理. 我们就考虑在这个基础上做一次封装,weixin.class.ph ...
- python 并发和线程
并发和线程 基本概念 - 并行.并发 并行, parallel 互不干扰的在同一时刻做多件事; 如,同一时刻,同时有多辆车在多条车道上跑,即同时发生的概念. 并发, concurrency 同时做某些 ...
- Python --标准库 存储对象 (pickle包,cPickle包)
在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python“一切皆对象”的哲学,在Python中,无论是变量还是函数,都是一个对象.当Python运行时,对象 ...
- IntelliJ IDEA 学习(三):IntelliJ IDEA 快捷键、配置优化
一.两种方式可以设置快捷键: 1)setting -> keymap 想找到有关Idea工具的菜单或其他功能的话,可以再这里找到对应的快捷键 2)setting -> Editor - ...
- selenium 实现浏览器 前进和后退
#coding=utf-8from selenium import webdriver driver = webdriver.Chrome()driver.get("https://www. ...
- jquery动态生成html代码 怎么 获取id 或 class
动态创建的节点要用live方法加事件,语句要改为: $(“.del").live("click", function() { alert("获取到了" ...
- 让HttpClient不要打印巨多的日志
让HttpClient不要打印巨多的日志 log4j.logger.org.apache.commons.httpclient=DEBUG 參考http://hc.apache.org/httpcli ...