原题网址:http://www.lintcode.com/zh-cn/problem/assignment-operator-overloading-c-only/
实现赋值运算符重载函数,确保:
- 新的数据可准确地被复制
- 旧的数据可准确地删除/释放
- 可进行
A = B = C
赋值
说明
本题只适用于C++
,因为 Java 和 Python 没有对赋值运算符的重载机制。
样例
如果进行 A = B
赋值,则 A 中的数据被删除,取而代之的是 B 中的数据。
如果进行 A = B = C
赋值,则 A 和 B 都复制了 C 中的数据。
挑战
充分考虑安全问题,并注意释放旧数据。
1 #include <iostream> 2 #include <vector> 3 #include <math.h> 4 #include <string> 5 #include <algorithm> 6 using namespace std; 7 8 class Solution { 9 public: 10 char *m_pData; 11 Solution() 12 { 13 this->m_pData = NULL; 14 } 15 Solution(char *pData) 16 { 17 this->m_pData = pData; 18 } 19 20 // Implement an assignment operator 21 Solution operator=(const Solution &object) 22 { 23 // write your code here 24 if (this!=&object) 25 { 26 delete this->m_pData; 27 if (object.m_pData!=NULL) 28 { 29 this->m_pData=new char[strlen(object.m_pData)+1];//strlen()计算的长度不包含' '; 30 strcpy(this->m_pData,object.m_pData); 31 } 32 else 33 { 34 m_pData=nullptr; 35 } 36 } 37 return *this; 38 } 39 };
参考:
1 https://blog.csdn.net/wangyuquanliuli/article/details/45895287