题目描述:
Implement an assignment operator overloading method.
Make sure that:
- The new data can be copied correctly
- The old data can be deleted / free correctly.
- We can assign like
A = B = C
Clarification
This problem is for C++
only as Java and Python don't have overloading for assignment operator.
Example
If we assign like A = B
, the data in A should be deleted, and A can have a copy of data from B.
If we assign like A = B = C
, both A and B should have a copy of data from C.
Challenge
题目思路:
Consider about the safety issue if you can and make sure you released the old data.
这题就是考c++中的overload。题目要求先delete A,再copy B中的data。那么首先检查A的data是不是已经等于B了,如果是,直接return;如果不是,先delete A的data,然后new一个新的char*,把B的data copy到A中去。
Mycode(AC = 5ms):
class Solution {
public:
char *m_pData;
Solution() {
this->m_pData = NULL;
}
Solution(char *pData) {
this->m_pData = pData;
}
// Implement an assignment operator
Solution operator=(const Solution &object) {
// write your code here
// if A == B, just return A
if (this->m_pData == object.m_pData){
return *this;
}
// delete A
if (this->m_pData) {
this->m_pData = NULL;
delete[] this->m_pData;
}
// if B has data, then new a char[], and copy the data
// from B to A
if (object.m_pData){
this->m_pData = new char[strlen(object.m_pData) + 1];
strcpy(this->m_pData, object.m_pData);
}
return *this;
}
};