剑指offer笔记(3)c++中重载类的赋值符号

编程入门 行业动态 更新时间:2024-10-11 07:36:16

剑指offer笔记(3)c++中重载类的<a href=https://www.elefans.com/category/jswz/34/1769111.html style=赋值符号"/>

剑指offer笔记(3)c++中重载类的赋值符号

这是剑指offer第二版25页的题目:

 按照上面的要求写出来的代码是这样的:

#include<iostream>
#include<cstring>class CMyString
{public:CMyString(char* pData = nullptr){m_pData = pData;}CMyString(const CMyString& str){m_pData = new char(strlen(str.m_pData) + 1);strcpy(m_pData, str.m_pData);}~CMyString(){delete m_pData;}void Print(){std::cout << m_pData << std::endl;}CMyString& operator= (const CMyString& str){if(this == &str){return *this;}delete m_pData;m_pData = new char(strlen(str.m_pData) + 1);strcpy(m_pData, str.m_pData);return *this;}int main()
{char s[] = "hello";CMyString mystring1(s);CMyString mystring2;mystring2 = mystring1;mystring2.Print();return 0;
}

但是优秀的程序员是这样的:

#include<iostream>
#include<cstring>class CMyString
{public:CMyString(char* pData = nullptr){m_pData = pData;}CMyString(const CMyString& str){m_pData = new char(strlen(str.m_pData) + 1);strcpy(m_pData, str.m_pData);}~CMyString(){delete m_pData;}void Print(){std::cout << m_pData << std::endl;}CMyString& operator= (const CMyString& str){if(this != &str){CMyString strTemp(str);char* pTemp = m_pData;m_pData = strTemp.m_pData;strTemp.m_pData = pTemp;}return *this;}private:char* m_pData;};int main()
{char s[] = "hello";CMyString mystring1(s);CMyString mystring2;mystring2 = mystring1;mystring2.Print();return 0;
}

总结:

对比两个代码,我们会发现其实两段代码都执行了new 和delete的操作,但是第二段将new 和delete的操作隐藏在了拷贝构造函数和析构函数中了,这样使得代码更加强健。

更多推荐

剑指offer笔记(3)c++中重载类的赋值符号

本文发布于:2024-03-06 17:47:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1715973.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:赋值   剑指   符号   笔记   offer

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!