C++智慧指標模板類複習
//C++智慧指標模板類複習
#include<iostream>
#include<memory>
using namespace std;
//智慧指標用於確保程式不存在記憶體和資源洩漏且是異常安全的。
//C++98中提供了auto_ptr,C++11摒棄了auto_ptr,並提出了unique_ptr 、shared_ptr、weak_ptr
void show1()
{
int* p = new int(4);
cout << *p << endl;
}
void show2()
{
int* p = new int(5);
try
{
if(1)//這裡只做假設
{
throw "error";
}
}
catch(const char* er)
{
cout << er << endl;
return;
}
cout << 1 << endl;
delete p;
}
void show3()
{
auto_ptr<int> p(new int(5));
cout << *p << endl;
}
unique_ptr<int> get()
{
unique_ptr<int> p(new int(5));
return p;
}
int main()
{
/*
//智慧指標的目的
show1();//show1很明顯造成了記憶體洩露,雖然指標p隨著show1的結束而銷燬,但是開闢的堆空間仍然存留
show2();//show2很明顯如果try中遇到了錯誤程式退出,那麼也會造成記憶體洩露
show3();//auto_ptr實際上是一個用int例項化的模板類,對於開闢空間的回收寫在了類的解構函式中,所以隨著p物件的銷燬,堆空間也跟隨銷燬
*/
/*
//auto_ptr之間的指標物件在進行互相賦值時,將會轉讓對開闢的空間地址的所有權,如果不轉讓所有權的話,會對同一個堆記憶體進行多次回收,造成錯誤
auto_ptr<int> temp1(new int(5));
cout << *temp1 << endl;
auto_ptr<int> temp2(temp1);//此時temp1將開闢的堆空間的首地址傳給temp2,並且temp1不再擁有
//cout << *temp1 << endl;//這裡將會發生錯誤,因為temp1已經為空
*/
/*
//shared_ptr之間的物件在進行互相賦值時不會轉讓所有權,這是因為shared_ptr採用了計數機制,當有多個智慧指標同時指向一個堆空間時,
//一個指標物件的銷燬不會回收堆空間,只有當計數為1時,此時只有一個指標指向堆空間,此時指標物件銷燬時才回收堆空間
shared_ptr<int> temp3(new int(5));
cout << *temp3 << endl;
shared_ptr<int> temp4(temp3);
cout << *temp3 << endl;//此時不會報錯
*/
/*
//unique_ptr 類似於auto_ptr,也建立了所有權的概念,但是不用的是unique_ptr不允許普通物件之間的賦值,否則將會在編譯時報錯,但是有一種特殊情況,我們接下來介紹
unique_ptr<int> temp5(new int(5));
cout << *temp5 << endl;
//unique_ptr<int> temp6(temp5);//這裡將會報錯
unique_ptr<int> temp6 = get(); //這是唯一的一種特殊情況,因為get函式把p返回後立即銷燬原先的指標,所以不存在日後出錯的說法,所以允許這種賦值
cout << *temp6 << endl;
*/
/*
//weak_ptr結合 shared_ptr 使用的特例智慧指標。 weak_ptr 提供對一個或多個 shared_ptr 例項擁有的物件的訪問,但不參與引用計數。
//如果你想要觀察某個物件但不需要其保持活動狀態,請使用該例項。 在某些情況下,需要斷開 shared_ptr 例項間的迴圈引用。
shared_ptr<int> temp7(new int(5));
weak_ptr<int> a(temp7); //use_count成員函式用來顯示目前的shared_ptr指標的計數
cout << a.use_count() << endl; //因為a是物件,use_count是a的成員函式,所以用.
shared_ptr<int> temp8(temp7);
cout << a.use_count() << endl;
*/
return 0;
}
#include<iostream>
#include<memory>
using namespace std;
//智慧指標用於確保程式不存在記憶體和資源洩漏且是異常安全的。
//C++98中提供了auto_ptr,C++11摒棄了auto_ptr,並提出了unique_ptr 、shared_ptr、weak_ptr
void show1()
{
int* p = new int(4);
cout << *p << endl;
}
void show2()
{
int* p = new int(5);
try
{
if(1)//這裡只做假設
{
throw "error";
}
}
catch(const char* er)
{
cout << er << endl;
return;
}
cout << 1 << endl;
delete p;
}
void show3()
{
auto_ptr<int> p(new int(5));
cout << *p << endl;
}
unique_ptr<int> get()
{
unique_ptr<int> p(new int(5));
return p;
}
int main()
{
/*
//智慧指標的目的
show1();//show1很明顯造成了記憶體洩露,雖然指標p隨著show1的結束而銷燬,但是開闢的堆空間仍然存留
show2();//show2很明顯如果try中遇到了錯誤程式退出,那麼也會造成記憶體洩露
show3();//auto_ptr實際上是一個用int例項化的模板類,對於開闢空間的回收寫在了類的解構函式中,所以隨著p物件的銷燬,堆空間也跟隨銷燬
*/
/*
//auto_ptr之間的指標物件在進行互相賦值時,將會轉讓對開闢的空間地址的所有權,如果不轉讓所有權的話,會對同一個堆記憶體進行多次回收,造成錯誤
auto_ptr<int> temp1(new int(5));
cout << *temp1 << endl;
auto_ptr<int> temp2(temp1);//此時temp1將開闢的堆空間的首地址傳給temp2,並且temp1不再擁有
//cout << *temp1 << endl;//這裡將會發生錯誤,因為temp1已經為空
*/
/*
//shared_ptr之間的物件在進行互相賦值時不會轉讓所有權,這是因為shared_ptr採用了計數機制,當有多個智慧指標同時指向一個堆空間時,
//一個指標物件的銷燬不會回收堆空間,只有當計數為1時,此時只有一個指標指向堆空間,此時指標物件銷燬時才回收堆空間
shared_ptr<int> temp3(new int(5));
cout << *temp3 << endl;
shared_ptr<int> temp4(temp3);
cout << *temp3 << endl;//此時不會報錯
*/
/*
//unique_ptr 類似於auto_ptr,也建立了所有權的概念,但是不用的是unique_ptr不允許普通物件之間的賦值,否則將會在編譯時報錯,但是有一種特殊情況,我們接下來介紹
unique_ptr<int> temp5(new int(5));
cout << *temp5 << endl;
//unique_ptr<int> temp6(temp5);//這裡將會報錯
unique_ptr<int> temp6 = get(); //這是唯一的一種特殊情況,因為get函式把p返回後立即銷燬原先的指標,所以不存在日後出錯的說法,所以允許這種賦值
cout << *temp6 << endl;
*/
/*
//weak_ptr結合 shared_ptr 使用的特例智慧指標。 weak_ptr 提供對一個或多個 shared_ptr 例項擁有的物件的訪問,但不參與引用計數。
//如果你想要觀察某個物件但不需要其保持活動狀態,請使用該例項。 在某些情況下,需要斷開 shared_ptr 例項間的迴圈引用。
shared_ptr<int> temp7(new int(5));
weak_ptr<int> a(temp7); //use_count成員函式用來顯示目前的shared_ptr指標的計數
cout << a.use_count() << endl; //因為a是物件,use_count是a的成員函式,所以用.
shared_ptr<int> temp8(temp7);
cout << a.use_count() << endl;
*/
return 0;
}
相關文章
- C++基於模板實現智慧指標C++指標
- C++智慧指標C++指標
- 【C++】 61_智慧指標類别範本C++指標
- C++ 類成員指標C++指標
- C++進階(智慧指標)C++指標
- C++智慧指標學習——小談引用計數C++指標
- c++ 智慧指標用法詳解C++指標
- C++筆記(11) 智慧指標C++筆記指標
- c++ 類的函式引用 指標C++函式指標
- C++ 用智慧指標這樣包裝 this 指標是否可行C++指標
- C++標準庫有四種智慧指標C++指標
- 智慧指標用法學習指標
- 【C++】智慧指標的正確使用方式C++指標
- C++ this 指標C++指標
- C++ 指標C++指標
- C++學習筆記 — STL標準模板庫C++筆記
- 聊聊 C++ 中的幾種智慧指標 (上)C++指標
- 詳解c++指標的指標和指標的引用C++指標
- C++指標理解C++指標
- 智慧指標指標
- c++智慧指標中的reset成員函式C++指標函式
- c++動態記憶體管理與智慧指標C++記憶體指標
- C++ 學習筆記(3):引用和指標C++筆記指標
- c++ 函式指標C++函式指標
- C++(函式指標)C++函式指標
- C++中的this指標C++指標
- C++基礎回顧4——智慧指標shared_ptrC++指標
- C++,繼承,基類和派生類指標間賦值等知識C++繼承指標賦值
- [CPP] 智慧指標指標
- 智慧指標引用計數變化學習指標
- 什麼是智慧指標?為什麼要用智慧指標?指標
- [C++] 成員函式指標和函式指標C++函式指標
- 【C++系列】指標物件和物件指標的區別C++指標物件
- 基類指標,子類指標,虛擬函式,override與final指標函式IDE
- C/C++指標總結C++指標
- 1-7 C++指標C++指標
- C/C++複習C++
- openfoam 智慧指標探索指標
- 第 10 節:複合型別-5. 指標 -- 指標與指標變數 -8. 多級指標型別指標變數