208.Assignment Operator Overloading (C++ Only)

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.

//copy answer from jiuzhang

class Solution {
public:
char *m_pData;
Solution() {
    this->m_pData = NULL;
}
Solution(char *pData) {
    if (pData) {
        m_pData = new char[strlen(pData) + 1];
        strcpy(m_pData, pData);
    } else {
        m_pData = NULL;
    }
}

// Implement an assignment operator
Solution operator=(const Solution &object) {
    if (this == &object) {
        return *this;
    }
    
    if (object.m_pData) {
        char *temp = m_pData;
        try {
            m_pData = new char[strlen(object.m_pData)+1];
            strcpy(m_pData, object.m_pData);
            if (temp)
                delete[] temp;
        } catch (bad_alloc& e) {
            m_pData = temp;
        }
    } else {
        m_pData = NULL;
    }
    return *this;
}
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容