/*
智慧型指標
問題:c++中最令人頭疼的問題就是強迫程式設計師對申請的資源進行管理,容易記憶體洩漏
c++需要自己管理堆記憶體的申請和釋放
int * p= new int;
解決思路:
利用c++中乙個物件出了其作用域會被自動析構,因此我們只需要在建構函式的
時候申請空間,而在析構函式的時候釋放空間,這樣就減輕程式設計師在編碼過中,考慮資源釋放的問題了raii
std::shared_ptr 強指標
std::unique_ptr
std::weak_ptr 弱指標
引用計數
深拷貝、淺拷貝
深拷貝(完全複製):
優點:每乙個物件的指標都有指向記憶體的空間,而不是共享,所以物件在析構時候不存在重複釋放或者記憶體洩漏
缺點:記憶體開銷大
淺拷貝(類似引用,預設淺拷貝)
優點:通過拷貝建構函式例項化的物件的指標資料變數指向的共享的記憶體空間,因此記憶體開銷小
缺點:物件析構的時候可能重複釋放
智慧型指標結合了淺拷貝和深拷貝的優缺點
*/class test
~test() }
private:
int * m;
}; //減輕資源管理的難度
test t;
void * alloc_data()
file* open_file(char* name)
class student
}private:
char* m_pszname;
int * m_pcount; //資源計數器當資源為0是,可以被釋放
};student::student(student& obj)
student::~student()
student& student::operator=(student & obj)
if (--(*m_pcount) == 0)
m_pszname = obj.m_pszname;
m_pcount = obj.m_pcount;
(*m_pcount)++;
return *this;
}void student::release()}
int main()
C 拷貝 引用計數
通常,我們會按如下方式書寫拷貝建構函式 class lif 預設建構函式 lif const lif l lif l.lif 拷貝建構函式 private int lif 這是正確的。但是,如果資料成員包含指標型別的話,這種寫法就很危險了。class lif 為lif動態分配記憶體 lif cons...
自動引用計數
每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...
引用計數 copy on write
拷貝通常分為值拷貝也叫淺拷貝和深拷貝,當拷貝方式為淺拷貝時就會有以下兩個問題 1 當需要調析構函式時,會出現同一塊空間被析構兩次的情況 2 如果是對指標的淺拷貝,會讓兩個指標同時管理同一塊空間,當乙個指針對這塊空間進行修改時,會影響到另外乙個指標。通過引用計數加寫時拷貝可以有效地解決這些問題。引用計...