1. 程式人生 > >c++知識總結(4)

c++知識總結(4)

靜態記憶體用來儲存區域性static物件、類static資料成員以及定義在任何函式之外的變數。棧記憶體用來儲存定義在函式內的非static物件。分配在靜態或棧記憶體中的物件由編譯器自動建立和銷燬。對於棧物件,僅在其定義的程式塊執行時才存在;static物件在使用之前分配,在程式結束時銷燬。

除了靜態記憶體和棧記憶體,每個程式還擁有一個記憶體池。這部分記憶體被稱作自由空間或堆。程式用堆來儲存動態分配的物件——即,那些在程式執行時分配的物件。動態物件的生存期由程式來控制,也就是說,當動態物件不再使用時,我們的程式碼必須顯示地銷燬它們。

new:在動態記憶體中為物件分配空間並返回一個指向物件的指標,我們可以選擇對物件進行初始化;delete,接受一個動態物件的指標,銷燬該物件,並釋放與之關聯的記憶體。新的標準庫提供了兩種智慧指標型別來管理動態物件。智慧指標的行為類似常規指標,重要的區別是它負責自動釋放所指向的物件。新標準提供的這兩種智慧指標的區別在於管理底層指標的方式:shared_ptr允許多個指標指向同一個物件;unique_ptr則“獨佔”所指向的物件。

接受智慧指標引數的智慧指標建構函式時explicit的。因此,我們不能將一個內建指標隱式轉換為一個智慧指標,必須使用直接初始化來初始化一個智慧指標:

智慧指標可以提供對動態分配的記憶體安全而又方便的管理,但這建立在正確使用的前提下。為了正確使用智慧指標,我們必須堅持一些基本的規範:

1.不使用相同的內建指標值初始化(或reset)多個智慧指標。

2.不delete get()返回的指標

3.不使用get()初始化或reset另一個智慧指標

4.如果你使用get()返回的指標,記住當最後一個對應的智慧指標銷燬後,你的指標就變為無效了。

5.如果你使用智慧指標管理的資源不是new分配的記憶體,記住傳遞給它一個刪除器。

int *p = new int[42];

當用new分配一個數組時,我們並未得到一個數組型別的物件,而是得到一個數組元素型別的指標。由於分配的記憶體並不是一個數組型別,因此不能對動態陣列呼叫begin或end。出於相同的原因,也不能用範圍for語句來處理動態陣列中的元素。

delete []p;陣列的元素按逆序銷燬,即,最後一個元素首先被銷燬,然後是倒數第二個,依次類推。

相關推薦

c++知識總結(4)

靜態記憶體用來儲存區域性static物件、類static資料成員以及定義在任何函式之外的變數。棧記憶體用來儲存定義在函式內的非static物件。分配在靜態或棧記憶體中的物件由編譯器自動建立和銷燬。對於棧物件,僅在其定義的程式塊執行時才存在;static物件在使用之前分配,在

C/C++ 知識總結

目錄 C/C++ STL 資料結構 演算法 Problems 作業系統 計算機網路 網路程式設計 資料庫 設計模式 連結裝載庫 海量資料處理 音視訊 其他 書籍 複習刷題網站 招聘時間崗位

C++知識總結

1.什麼是C++? c++是在c語言的基礎上開發的一種面對物件的程式語言,它支援多種程式設計正規化:面對物件程式設計、泛型程式設計和過程化程式設計。 應用十分廣泛,常用於系統,引擎等的開發,另外還支援類、封裝、過載、多型等特性。 2.C和C++的區別

JAVA基礎知識總結4——IO

輸出和輸入都是以程式為中心 File類:代表系統檔名(路徑和檔名)             可以進行建立、刪除檔案和路徑等操作,只對檔案本身進行操作,並不涉及檔案的具體內容    &nb

git知識總結4——檢視歷史、回退版本、刪除

要隨時掌握工作區的狀態,使用git status命令。 如果git status告訴你有檔案被修改過,用git diff可以檢視修改內容。 HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_

keil c 知識總結

Franklin C-51語言程式設計基礎 1.1 Franklin C-51資料型別 Franklin C-51編譯器支援下列資料型別: 資料型別 長度 值域 bit 1 位元組 0 或 1 signed char 1 位元組 -128~+127 unsigned cha

9.4 C++ 學習總結

ive 整型 發現 文件輸入 文件的 cin c++ 文件 字符 今天沒有看很多,看了兩個內容還不是看的很仔細打算看仔細了在寫剩下的部分。 C++基本的輸入輸出 1、對屏幕的數據與字符串的輸入輸出 主要是對變量的從屏幕上的讀取,以及運算後的輸出,與C語言的內容沒有區別,

C# 委托知識總結

view 思路 hand 我想 出現 while text .... 否則 1.什麽是委托,為什麽要使用委托 我正在埋頭苦寫程序,突然想喝水,但是又不想自己去掉杯水而打斷自己的思路,於是我就想讓女朋友去給我倒水。她去給我倒水,首先我得讓她知道我想讓她幹什麽,通知她之後我可

C++順序容器知識總結

交換 prior 效率 導致 獲取 tac pos stack empty   容器是一種容納特定類型對象的集合。C++的容器可以分為兩類:順序容器和關聯容器。順序容器的元素排列和元素值大小無關,而是由元素添加到容器中的次序決定的。標準庫定義了三種順序容器的類型:vecto

C++ 知識回顧總結 -- queue 佇列容器

一、說明 queue 是一種佇列介面卡,專門設計用於FIFO中操作(先進先出),元素從一端插入容器並從另一端提取。 相關API地址為:http://www.cplusplus.com/reference/queue/queue/ 二、使用方法 在C++中只要#include<queue>即

C/C++基礎知識總結1

轉載:https://blog.csdn.net/taoyanqi8932/article/details/56841134   https://blog.csdn.net/black_yu/article/details/50932099   https://b

C++重點知識總結----字串

一、C風格字串 1、 C++通常通過char*型別的指標來操縱C風格字串,直到到達結束符null為止 2、指向同一個字串的指標可做算術運算 3、strlen()計算字元陣列的字元數,以’\0’為結束標誌,計算不為’\0’的陣列元素個數 4、printf語句在輸出字串時,將’\0

C++重點知識總結----陣列

記憶體分割槽: 堆:手動分配釋放,malloc,new來分配,free,delete來釋放 棧:編譯器自動分配釋放,存放函式的引數值、區域性變數的值等 全域性(靜態)儲存區:存放全域性變數和靜態變數,包括DATA段(全域性初始化區,存放初始化的全部變數和靜態變數)與BSS段(全域性未初

C++類相關知識總結

1、類和物件 類就是對物件的描述,主要從屬性和行為兩個方面描述。 對於屬性一般作成private , 行為作為public 函式 (1)建構函式,初始化所有的成員變數,系統自動呼叫,可以過載 (2)解構函式,在物件生命週期結束的時候自動被呼叫呼叫,不準過載 建構函式和解構函式都是系統自動呼叫

C(++)語言程式設計前五章知識總結

c(++)語言程式設計前五章總結 一、標頭檔案 作用:通過標頭檔案藉口來呼叫庫函式 常用: C–include<stdio.h>定義輸入輸出函式 include<string.h>字串處理 C+±-include呼叫cin cout include呼叫printf

C++基礎知識總結

1 面試C++程式設計師的時候一般都是3板斧,先是基礎問答,然後一頓虛擬函式、虛擬函式表、純虛擬函式、抽象類、虛擬函式和解構函式、虛擬函式和建構函式。接著拷貝建構函式、操作符過載、下面是STL,最後是智慧指標。        

C#基礎知識總結(一)

  這個基礎知識系列是我自己對基礎知識的一個鞏固和總結,在複習的過程中對細節知識點加深印象,可能其中有錯誤之處,請大家批評指正,謝謝。希望和大家共同學習共同進步。 摘要   這個系列一篇總結了:C#程式的結構,程式碼的註釋,鍵盤快捷鍵的使用,C#和.NET的關係。 一、C#程式的結構(介紹解決方案和專案

C#基礎知識總結(二)

摘要   第二篇主要講:變數、連線符佔位符等、轉義字元、資料的計算、資料的轉換、try-catch的簡單熟悉、複合運算子和自加自減 一、變數  1.資料儲存在記憶體中:記憶體叫做RAM,記憶體被分隔為一小格一小格的,每個小格有個地址。記憶體的特點是:斷電後資料丟失  2.變數:變數代表著一塊記憶體空間,我

C++基礎知識總結與回顧--5.5共享資料的保護

5.5.1 常物件 func1(const Point & p1)和func2(Point & p1)這兩種函式引數寫法的區別在哪裡? 答 : fun1保證實參在函式呼叫後不會被改變, 如果函式體內試圖改變p1,編譯器會報錯. 對func1(const Point &

C++總結4——記憶體洩露/資源洩露【轉】

記憶體洩露/資源洩露現象  1.malloc/new動態申請的記憶體,忘記寫free/delete,導致記憶體洩露。 2.呼叫預設的賦值運算子過載函式,發生淺拷貝現象,導致記憶體洩露。如下圖:  3.在建構函式中new,但是程式執行過程中丟擲異常,未呼叫解構函式。