引言: 當類包含指針成員時,預設的淺拷貝會導致雙重釋放、內存洩漏等嚴重問題。必須顯式定義「三大件」(拷貝構造、拷貝賦值、析構函數)實現深拷貝或引用計數,確保資源管理正確。
class HasPtr {
public:
HasPtr(const string& s = "") : ps(new string(s)), i(0) {}
// 拷貝構造
HasPtr(const HasPtr& hp) : ps(new string(*hp.ps)), i(hp.i) {}
// 拷貝賦值
HasPtr& operator=(const HasPtr& hp) {
auto newp = new string(*hp.ps); // 先分配,防自賦值異常
delete ps;
ps = newp;
i = hp.i;
return *this;
}
// 析構
~HasPtr() { delete ps; }
private:
string* ps;
int i;
};
掌握指針成員的復制控制,是編寫健壯 C++ 類的關鍵技能。