首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ Primer 學習筆記 57:類與數據抽象——管理指針成員的復制控制

     編輯:C++ 入門

引言: 當類包含指針成員時,預設的淺拷貝會導致雙重釋放、內存洩漏等嚴重問題。必須顯式定義「三大件」(拷貝構造、拷貝賦值、析構函數)實現深拷貝或引用計數,確保資源管理正確。

核心要點

  • 拷貝構造函數:分配新內存,複製指針指向的對象
  • 拷貝賦值運算符:處理自賦值、釋放舊資源、分配新資源、複製數據
  • 析構函數:釋放指針管理的資源
  • C++11 新增移動構造/移動賦值,通過右值引用避免不必要的深拷貝,提升性能

經典範例:智能指針雛形

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++ 類的關鍵技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved