實在不好意思,到這里才給大家分享new和delete。
對于非內部數據類型的對象而言,光用malloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。
由于malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加于malloc/free。
new和delete是運算符不是函數
因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理與釋放內存工作的運算符delete。new/delete不是庫函數,而是運算符。
一、new關鍵字
new用來在內存中分配一塊內存,new分配的對象是沒有名稱的,而是返回一個指向該對象的指針
int *p1=new int(1); //pi指向一個動態分配的、初始化值為1的無名對象
int *p2(new int(1)); //同上
二、new的值初始化規則
通用規則
如果類型名后無括號:內置類型或組合類型的對象的值是未定義的,而類類型對象將用默認構造函數進行初始化
如果類型名后有括號:則內置類型/組合類型/類類型都進行默認的初始化
//如果類型名后無括號string *ps = new string; //ps為初始化為空的stringcout << *ps << endl; //值