C primer(第四版)讀書筆記2

2021-06-01 18:43:15 字數 1006 閱讀 6594

以下幾種情況都可能引發執行時或編譯時錯誤:

1)delete不是new分配的空間

2)重複delete new分配的空間兩次以上

3)在釋放動態陣列時忘了方括號對

inti;int

*pi=&i;

delete

pi; 

//vs 2008

會執行時錯誤

string str=

"dwarves";

delete

str;

//vs 2008

會編譯錯誤

int*p=

newint

();

deletep;

delete

p; //vs 2008

會執行時錯誤

int*p=new

int[10]();

delete

p; //vs 2008

執行時並未報錯,但會產生記憶體洩露。對於某些系統或元素型別,有可能帶來嚴重的執行時錯誤 //

因此在釋放動態陣列時千萬別忘了方括號對

如果指標值為0,則在其上delete操作是合法的,c++保證刪除0的指標是安全的。但這樣做無任何意義

int *p=0;

delete p;

//ok

筆記:由此可以看出類的設計者,只需管理自己的指標資料成員的析構,而不能去管理類的使用者傳進來的指標引數。如果也去析構,很有可能析構傳進的引數時發生crash。記住誰分配誰釋放的原則

int *p=new int;   //不加圓括號,內建型別不會初始化

int *pi=new int();  //初始化為0

對於有預設建構函式的類型別則以下兩句效果一樣

string *ps=new string;

string *ps=new string();

new表示式無法獲取需要的記憶體空間,系統將丟擲bad_alloc的異常

C primer(第四版)讀書筆記5

extern int i declares but does not define i int i declares and defines i extern宣告不是定義,也不分配儲存空間。事實上,它只是說明變數定義在程式的其他地方。程式中變數可以宣告多次,但只能定義一次。如果宣告有初始化式,那麼它...

C Primer中文版第四版 讀書筆記

2011.8.10 p46 只有當extern 宣告位於函式外部時,才可以含有初始化式。extern double pi 3.1416 pi 是乙個全域性變數,這是乙個定義 p50 在全域性作用域宣告的const 變數是定義該物件的檔案的區域性變數 僅作用在該檔案中 要使 const 變數能夠在其他...

C Primer 第四版讀書筆記(五)之語句

通常情況下,語句是順序執行的。但是,除了最簡單的程式外,只有順序執行往往並不足夠。為此,c 定義了一組控制流語句,允許有條件地執行或者重複地執行某部分功能。1.1 簡單語句 c 中,大多數語句以分號結束。表示式語句用於計算表示式。1.2 宣告語句 在c 中,物件或類的定義或宣告也是語句。1.3 復合...