|
在C++中,操作符new 用于申請(qǐng)內(nèi)存,操作符delete 用于釋放內(nèi)存。在C 語言中,函數(shù)malloc 用于申請(qǐng)內(nèi)存,函數(shù)free 用于釋放內(nèi) 存。由于C++兼容C 語言,所以new、delete、malloc、free 都有可能一起使用。new 能比malloc 干更多的事,它可以申請(qǐng)對(duì)象的內(nèi)存,而malloc 不能。C++和C 語言中的指針威猛無比,用錯(cuò)了會(huì)帶來災(zāi)難。對(duì)于一個(gè)指針p,如果是用new申請(qǐng)的內(nèi)存,則必須用delete 而不能用free 來釋放。如果是用malloc 申請(qǐng)的內(nèi)存,則必須用free 而不能用delete 來釋放。在用delete 或用free 釋放p 所指的內(nèi)存后,應(yīng)該馬上顯式地將p 置為NULL,以防下次使用p 時(shí)發(fā)生錯(cuò)誤。示例程序如下:
void Test(void) 我們還要預(yù)防“野指針”,“野指針”是指向“垃圾”內(nèi)存的指針,主要成因有兩種: ?。?)指針沒有初始化。 class A 2.4 使用const 在定義一個(gè)常量時(shí),const 比#define 更加靈活。用const 定義的常量含有數(shù)據(jù)類型,該常量可以參與邏輯運(yùn)算。例如: const int LENGTH = 100; // LENGTH 是int 類型 除了能定義常量外,const 還有兩個(gè)“保護(hù)”功能: 一、強(qiáng)制保護(hù)函數(shù)的參數(shù)值不發(fā)生變化 以下程序中,函數(shù)f 不會(huì)改變輸入?yún)?shù)name 的值,但是函數(shù)g 和h 都有可能改變name的值。 void f(String s); // pass by value 對(duì)于一個(gè)函數(shù)而言,如果其‘&’或‘*’類型的參數(shù)只作輸入用,不作輸出用,那么應(yīng)當(dāng)在該參數(shù)前加上const,以確保函數(shù)的代碼不會(huì)改變?cè)搮?shù)的值(如果改變了該參數(shù)的值,編譯器會(huì)出現(xiàn)錯(cuò)誤警告)。因此上述程序中的函數(shù)g 和h 應(yīng)該定義成: void g(const String &s); 二、強(qiáng)制保護(hù)類的成員函數(shù)不改變?nèi)魏螖?shù)據(jù)成員的值 以下程序中,類stack 的成員函數(shù)Count 僅用于計(jì)數(shù),為了確保Count 不改變類中的任何數(shù)據(jù)成員的值,應(yīng)將函數(shù)Count 定義成const 類型。 class Stack |
|
|