直接內(nèi)存管理

直接內(nèi)存管理(new/delete):

1.初始化

int * point_i = new int; //初值未定義
string *mystr = new string; //空字符串
int *point_i_2 = new int(10); //初始化10
string * mystr_2 = new string(5, 'a'); //字符串長度5,默認值'a'
vector<int> *point_v = new vector<int>{1, 2, 3, 4, 5};

概念:值初始化,用()空括號初始化,對于對象來說,加不加()效果一樣,但是為了避免出現(xiàn)初值未定義,建議都是用值初始化

int * point_i = new int(); //初始化為0
string * mystr = new string(); //初始化為空字符串

const對象也可以動態(tài)分配

const int * point_ci = new const int(100);

new 和 delete 說明

  • 成對使用, delete的作用是回收new分配的內(nèi)存,不是new出來的內(nèi)存,是不能用delete釋放的;
  • delete一塊內(nèi)存,只能delete一次。delete后,這塊內(nèi)存就不存在;但是,空指針可以刪除多次,但刪除多次并沒有意義。
int * p = new int();
int *p2 = p;
delete p2;
delete p; //運行報錯,p和p2指向同一塊內(nèi)存,智能指針可以解決這個問題

char * p3 = nullptr;
delete p3;
delete p3; //不報錯

注意事項

  1. new出來的內(nèi)存千萬不要忘記delete,否則內(nèi)存泄漏,時間一長可能資源緊張,運行崩潰
  2. delete后的內(nèi)存不能再使用,否則異常
  3. 同一塊內(nèi)存釋放兩次的問題,異常

用new,delete直接內(nèi)存管理,要很小心;
c++11開始出現(xiàn)了智能指針,new,忘記了delete,智能指針能夠幫你delete

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,661評論 1 51
  • C++運算符重載-下篇 本章內(nèi)容:1. 運算符重載的概述2. 重載算術(shù)運算符3. 重載按位運算符和二元邏輯運算符4...
    Haley_2013閱讀 1,522評論 0 49
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,626評論 1 32
  • 內(nèi)存管理 C++使用new和delete兩個運算符進行內(nèi)存管理。 使用new進行動態(tài)分配和初始化對象 在自由空間內(nèi)...
    plantom閱讀 418評論 0 1
  • 幾種語言的特性 匯編程序:將匯編語言源程序翻譯成目標程序編譯程序:將高級語言源程序翻譯成目標程序解釋程序:將高級語...
    囊螢映雪的螢閱讀 3,058評論 1 5

友情鏈接更多精彩內(nèi)容