1.智慧型指標智慧型指標就是個類,對普通指標進行封裝,不管函式三正常結束還是異常結束,他在析構函式中對指標可以進行智慧型釋放
2.普通指標普通指標在使用完成後需要進行手動釋放,且容易造成堆的記憶體洩漏(忘記釋放),二次釋放,使用智慧型指標可以避免這些問題
3 在c++11中智慧型指標分為3種
包含在標頭檔案中,分別為:shared_ptr、unique_ptr、weak_ptr
4,三種智慧型指標歸納:型別
功能缺點
shared_ptr
使用引用次數,當引用次數為0時自動釋放 賦 值引用-1 拷貝引用+1 離開作用域自動釋放
不能迴圈引用,避免乙個原指標被兩個shared指標引用
unique_ptr
只能指向乙個指標物件,離開作用域後自動釋放
不能拷貝,賦值
weak_ptr
作為shared_ptr的輔助智慧型指標,引用shared_ptr 原指標引用數不變,使用lock獲取原指標的資源
作為shared_ptr的管理者
2.1,shared_ptr 智慧型指標
shared_ptr多個指標指向相同的物件
,使用引用計數
,每乙個shared_ptr拷貝都指向相同的記憶體,每使用他一次,內部的引用》計數器+1,每析構一次-1,減為0時,自動刪除所指向的堆記憶體
拷貝使得原物件的引用計數增加1,賦值使得原物件引用計數-1,被賦值物件引用+1,當計數為0時,自動釋放記憶體。
*shared_ptr需要避免迴圈引用
理解下面一端**,就可理解shared_ptr:
#include #include using namespace std;
int main()
void dosomething()
}~parent()
};class child
void dosomething()
}~child()
};int main()
std::cout << wpp.use_count() << std::endl; // 1
std::cout << wpc.use_count() << std::endl; // 1
return 0;
}
正確引用:
#include #include class child;
class parent;
class parent
void dosomething()
}~parent()
};class child
void dosomething()
}~child()
};int main()
std::cout << wpp.use_count() << std::endl; // 0
std::cout << wpc.use_count() << std::endl; // 0
return 0;
}
c 智慧型指標
auto prt 它是 它所指向物件的擁有者 所以當自身物件被摧毀時候,該物件也將遭受摧毀,要求乙個物件只有乙個擁有者,注意 auto prt 不能使用new 來分配物件給他 include include using namespace std template void bad print au...
c 智慧型指標
很久沒寫部落格了,不知道如何表達了,哈哈.我先介紹一下深淺拷貝.class copy 此時a.ptr和b.ptr指向同乙個物件,當我們delete a.ptr時 b.ptr所指向的物件已經不存在了,要是我們引用b.ptr指向的物件也就會出問題了.深拷貝 把a.ptr所指向的物件拷貝乙份給b.ptr ...
c 智慧型指標
記得前不久有一次面試被問到智慧型指標的實現,當時對智慧型指標只是聽說但沒有了解過,就亂七八糟地說了一遍。今天寫了一遍智慧型指標,用了引用計數的概念。主要思想就是,用乙個新類對原本需要的型別進行了一層封裝,這個新類中儲存了原本的物件指標和乙個引用計數的指標,之所以全部用指標來儲存,就是因為會出現多個新...