直接內(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; //不報錯
注意事項
- new出來的內(nèi)存千萬不要忘記delete,否則內(nèi)存泄漏,時間一長可能資源緊張,運行崩潰
- delete后的內(nèi)存不能再使用,否則異常
- 同一塊內(nèi)存釋放兩次的問題,異常
用new,delete直接內(nèi)存管理,要很小心;
c++11開始出現(xiàn)了智能指針,new,忘記了delete,智能指針能夠幫你delete