36-經典問題解析三
關於賦值的疑問
【問題】什麼時候需要重載賦值操作符?編譯器是否提供默認的賦值操作?
- 編譯器爲每個類默認重載了賦值操作符
- 默認的賦值操作符僅完成淺拷貝
- 當需要進行深拷貝時必須重載賦值操作符
- 賦值操作符與拷貝構造函數有相同的存在意義
【範例代碼】默認賦值操作符重載
#include <iostream>
#include <string>
using namespace std;
class Test {
int* m_pointer;
public:
Test() {
m_pointer = NULL;
}
Test(int i) {
m_pointer = new int(i);
}
Test(const Test& obj) {
m_pointer = new int(*obj.m_pointer);
}
Test& operator = (const Test& obj) {
if (this != &obj) {
delete m_pointer;
m_pointer = new int(*obj.m_pointer);
}
return *this;
}
void print() {
cout << "m_pointer = " << hex << m_pointer << endl;
}
~Test() {
delete m_pointer;
}
};
int main(int argc, const char* argv[]) {
Test t1 = 1;
Test t2;
t2 = t1;
t1.print();
t2.print();
return 0;
}