1.分配記憶體初始化標量型別(如 int 或 double),在型別名後加初始值,並用小括號括起,c++11中也支援大括號。
int * pi = new int (6);
double * pd = new double (9.99);
//c++11中, 支援以下寫法
int * pi = new int ;
double * pd = new double ;
2.初始化結構或陣列,需要使用大括號列表初始化 ,需編譯器支援 c++11。
struct where;
where * one = new where ;
int * ar = new int [4] ;
3.使用 delete 釋放 new分配的記憶體 (僅限於常規 new 分配的 堆記憶體)
delete pi;
delete pd;
delete one;
// 釋放陣列 記住 加
delete ar;
4.建立類物件
(1)new建立物件,ptest用來接收物件指標。new申請的物件,則只有呼叫到delete時才會執行析構函式,如果程式退出而沒有執行delete則會造成記憶體洩漏:
ctest* ptest = new ctest(); delete ptest;
(2)不用new,直接使用類定義申明,使用完後不需要手動釋放,該類析構函式會自動執行:
ctest mtest;
(3)使用普通方式建立的類物件,在建立之初就已經分配了記憶體空間。而類指標,如果未經過物件初始化,則不需要delete釋放:
ctest* ptest = null;
1.常規分配記憶體,呼叫建構函式。分配失敗時,丟擲異常。定義如下:
void* operator new(std::size_t) throw(std::bad_alloc);void operator delete(void *) throw();
分配失敗則丟擲異常std::bad_alloc,不是返回null,所以判斷返回值是否為null是沒用的。
char *p=new char[size]; //分配失敗,不是返回null
delete p;
2.不丟擲異常。分配失敗時,返回null。定義如下:
void* operator new(std::size_t,const std::nothrow_t&) throw();void operator delete(void*) throw();
char *p=new(nothrow) char[size]; //分配失敗,是返回null
if(null==p)
cout<<"alloc failure!"《運算子new 和 new 分別呼叫如下函式:
void * operator new(std::size_t); //use by new
void * operator new (std::size_t); //use by new
運算子delete 和 delete 分別呼叫如下函式:
void * operator delete(void *); //use by delete
void * operator delete (void *); //use by delete
這些函式稱為分配函式,位於全域性命名空間中。std::size_t 是乙個 typedef。
例:
int * pi = new int;
//將轉換為下面這樣
int * pi = new (sizeof(int));
int * pi = new int[40];
//將轉換為下面這樣
int * pi = new (40 * sizeof(int));
//同樣的
delete pi;
//將轉換為下面這樣
delete (pi);
通常,new負責在 堆 中分配乙個足以滿足要求的記憶體塊,但定位new可以讓程式設計師指定要使用的記憶體位置。不會記憶體分配失敗,因為它根本不分配記憶體,只呼叫物件的建構函式。它允許在一塊已經分配成功的記憶體上重新構造物件或物件陣列。定義如下:
void* operator new(size_t,void*);
void operator delete(void,void);
1.使用 定位new運算子,首先要包含標頭檔案 new
#includeusing namespace std;
struct chaff
;char buffer1[50];
char buffer2[200];
int main()
2.使用placement new構造起來的物件或陣列,要顯式呼叫它們的析構函式來銷毀(析構函式並不釋放物件的記憶體),千萬不要使用delete.這是因為placement new構造起來的物件或陣列大小並不一定等於原來分配的記憶體大小,使用delete會造成記憶體洩漏或者之後釋放記憶體時出現執行時錯誤。
3.當使用new運算子定義乙個多維陣列變數或陣列物件時,它產生乙個指向陣列第乙個元素的指標,返回的型別保持了除最左邊維數外的所有維數。
C new用法總結
有一道這樣的題 寫出c 中new關鍵字的三種用法,思前想後挖空心思也只想出了兩種用法,回來查了下msdn,還真是有第三種用法 用於在泛型宣告中約束可能用作型別引數的引數的型別,這是在framework 2.0 中定義泛行時才會使用到的,自己對c 2.0 中的支援還只是 粗通皮毛,怪不得累死so ma...
運算子總結
1,算術運算子 加或正號 減或負號 乘 除,得到的是商 取餘 自增 自減 字串連線符 注意 a 整數相除結果還是整數 b 從左向右依次運算 c 兩個運算元,分為左邊和右邊 左邊小於右邊,結果是左邊 左邊等於右邊,結果為0 左邊大於右邊,結果是餘數 最終的餘數的符號和左邊的運算元一直 d 和 如果單獨...
C new和delete運算子得簡單使用
c 中的new運算子用來分配記憶體,和c語言中得malloc有相似得功能。使用new為當個元素開闢記憶體空間,並返回位址 typename pointer name new typename int a new int 使用new建立動態陣列並返回位址 typename pointer name n...