直接内存管理(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 说明
- 成对使用, 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; //不报错
注意事项
- new出来的内存千万不要忘记delete,否则内存泄漏,时间一长可能资源紧张,运行崩溃
- delete后的内存不能再使用,否则异常
- 同一块内存释放两次的问题,异常
用new,delete直接内存管理,要很小心;
c++11开始出现了智能指针,new,忘记了delete,智能指针能够帮你delete
网友评论