直接内存管理

2019-08-20  本文已影响0人  是你亮哥哥呀

直接内存管理(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};

概念:值初始化,用()空括号初始化,对于对象来说,加不加()效果一样,但是为了避免出现初值未定义,建议都是用值初始化

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

const对象也可以动态分配

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

new 和 delete 说明

int * p = new int();
int *p2 = p;
delete p2;
delete p; //运行报错,p和p2指向同一块内存,智能指针可以解决这个问题

char * p3 = nullptr;
delete p3;
delete p3; //不报错

注意事项

  1. new出来的内存千万不要忘记delete,否则内存泄漏,时间一长可能资源紧张,运行崩溃
  2. delete后的内存不能再使用,否则异常
  3. 同一块内存释放两次的问题,异常

用new,delete直接内存管理,要很小心;
c++11开始出现了智能指针,new,忘记了delete,智能指针能够帮你delete

上一篇 下一篇

猜你喜欢

热点阅读