C++ Primer 5th笔记(chap 12 动态内存)智能指针概述
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 12 动态内存)智能指针概述
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 對(duì)象的生存期
| 全局對(duì)象 | 程序啟動(dòng)時(shí)分配,程序結(jié)束時(shí)銷毀 | |
| 靜態(tài)內(nèi)存 | 局部static對(duì)象類static數(shù)據(jù)成員 | 第一次使用時(shí)分配,程序結(jié)束時(shí)銷毀 |
| 棧內(nèi)存 | 定義在函數(shù)內(nèi)的非static對(duì)象局部自動(dòng)對(duì)象 | 進(jìn)入塊時(shí)分配,離開塊時(shí)銷毀 |
| 動(dòng)態(tài)內(nèi)存 | 定義在任何函數(shù)之外的變量 | 程序用堆來存儲(chǔ)動(dòng)態(tài)分配的對(duì)象顯式創(chuàng)建,顯式銷毀 |
2. 以前的內(nèi)存管理
2.1 new 創(chuàng)建內(nèi)存對(duì)象, delete刪除內(nèi)存對(duì)象
//直接初始化方式來初始化一個(gè)動(dòng)態(tài)分配的對(duì)象 int *pi = new int(2104); string *ps = new string(10, '9'); vector<int> *pv = new vector<int>{0,1,2,3,4,5,6};//值初始化,在類型名后加一對(duì)空括號(hào)即可 string *ps1 = new string; string *ps2 = new string(); int *pi1 = new int; int *pi2 = new int();2.1 動(dòng)態(tài)分配的const對(duì)象
const int *pci = new const int(1024); const string *pcs = new const string;//返回一個(gè)指向const的指針2.1. delete風(fēng)險(xiǎn)
dangling pointer: 被delete后的指針
//這種保護(hù)也是有限的, p雖然是空了,但是q還是在的。delete之后得重置指針值為null int *p(new int(42)); auto q = p; delete p; p = nullptr3. 智能指針
| shared_ptr | 允許多個(gè)指針指向同一個(gè)對(duì)象 |
| unique_ptr | 某個(gè)時(shí)刻只能有一個(gè) unique_str 指向一個(gè)給定對(duì)象 |
| weak_ptr | 弱引用,指向shared_ptr所管理的對(duì)象 |
shared_ptr 和unique_ptr都支持的操作
| shared_ptr sp unique_ptr up | 空智能指針,可以指向類型為T的對(duì)象 |
| p | 將p用作一個(gè)條件判斷,若p指向一個(gè)對(duì)象,則為true |
| *p | 解引用p,獲得它指向的對(duì)象 |
| p->mem | 等價(jià)于(*p).mem |
| p.get() | 返回p中保存的指針,要小心使用;若智能指針釋放了其對(duì)象,返回的指針?biāo)赶虻膶?duì)象也就消失了 |
| swap(p,q)/p.swap(q) | 交換p和q中的指針 |
總結(jié)
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 12 动态内存)智能指针概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha