5-1直接内存管理 new、delete、观察内存泄露。值初始化

目录

 

直接内存管理

观察内存泄露


直接内存管理

局部静态对象:局部静态对象所在函数被执行时初始化局部静态对象,当函数执行完成时不会释放对象,程序终止时释放对象,分配在静态存储区。

临时对象:随函数的执行,与结束,初始化与回收,分配在栈区。

new分配方式我们称为动态分配(分配在堆上):直接内存管理(new / delete)

初始化问题:

int *pointe = new int ;//初值未定义

string *mystr = new string ;//空字符串,调用了默认构造函数

int *pointi = new int(100);//给了初值的。

string *mystring2 = new string (5,'a'); //有5个a的字符串

vector<int> *pointv = new vector<int> {1,2,3,4,5}; //一个容器对象,仅有5个元素

值初始化:

string *mystr3 = new string();//也是空字符串

int *pointe1 = new int();//初始化为了0

new对象的时候能够进行值初始化就进行值初始化为好,防止它的值没有被初始化;

在c++11中,auto和new可以配合使用

string *mystr4 = new string (5,'a');
auto mystr5 = new auto(mystr4);//mystr5和4指向同一块内存的mystr5 = string **
//类似于 string **mystr5 = new string*(mystr4);//不建议使用,要谨慎。


cout << mystr4->c_str() <<endl;
cout << ( (*mystr5)->str() )<<endl;
cout <<*mystr4<<" "<<*mystr5 <<endl;

不要忘记delete

const对象也可以动态分配

 const int *pointcost = new const int (200);  指向常量不能赋值

有new不然delete。成对使用,回收new分配的内存(释放内存)。
不是new的不能使用,只能delete一次,不能delete多次。

(空指针可以删除多次,但是没有意义)

建议delete后,置空,表明该指针不指向任何对象了,方便后期问题排查。

C++11开始出现了“智能指针”,new忘记了delete,智能指针会帮助你delete。

观察内存泄露

用MFC应用程序,可以帮助发现内存泄露,只有在程序退出的时候才会出现

所以要当作一个小帮助。(vs2017 MFC的应用程序)不用深入,如果想看,可以看侯捷老师的书。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值