直接内存管理

直接内存管理(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 *point_v = new vector{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 说明

  • 成对使用, delete的作用是回收new分配的内存,不是new出来的内存,是不能用delete释放的;
  • delete一块内存,只能delete一次。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

你可能感兴趣的:(直接内存管理)