不同於拷貝構造,賦值操作作用於已構造對象。需檢查自賦值,釋放舊資源,深拷貝新資源,返回 `*this` 支持鏈式賦值。
class Dog {
int* data;
public:
Dog(int v=0) : data(new int(v)) {} // 一般/默認
Dog(const Dog& o) : data(new int(*o.data)) {} // 拷貝構造(深拷貝)
Dog& operator=(const Dog& o) { // 賦值運算符
if (this == &o) return *this;
delete data;
data = new int(*o.data);
return *this;
}
~Dog() { delete data; }
};
理解構造函數類型、拷貝語義(淺/深拷貝)、賦值運算符重載規則,是 C++ 資源管理的基石。C++11 引入移動語義後,更應掌握右值引用與完美轉發。