0
点赞
收藏
分享

微信扫一扫

【❌❌vectorの奇技淫巧⭕⭕】C++ vector 如何正确处理动态申请内存的元素


【❌❌vectorの奇技淫巧⭕⭕】C++ vector 如何正确处理动态申请内存的元素_动态内存

C++ vector 插入动态内存(new、malloc申请的内存)及销毁动态内存 (delete 、free)demo

我们使用vector时候,有时候会插入一些动态内存数据(例如new出来的指针插入到vector中)。这时候我们一定要注意C++的内存管理,因为C++的内存管理原则,谁申请的,谁销毁。我们如果不对vector里的指针对应的动态内存进行销毁操作,直接clear()的话就会造成内存泄露。所以我们需要首先遍历vector,把vector中元素存储的指针对应动态内存销毁掉,然后再clear()掉vector。

demo示例:

#include <vector>
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
vector<char *> obj;

//vector中插入动态内存
for(int i=0;i<10;i++)
{
char * ptr = new char[100];
memset(ptr, 0 , 100);

obj.push_back(ptr);
}

//需要清理申请的动态内存,然后才能清空vector,否则会造成内存泄露
for(vector<char *>::iterator it = obj.begin(); it != obj.end(); it++)
{
if(*it != NULL)
{
delete *it;
*it = NULL;
}
}
obj.clear();

return 0;
}

番外篇:new char[100]和new char(100)的区别

写demo的时候,顺手写了new char(100)。。。后面发现不对了。。。哎。。。所以加了个番外篇,记录一下。
new char[100]和new char(100)的区别,其实这个属于分配问题,大家使用时还是要注意的,失之毫厘差以千里啊!
详情如下:

char *p = new char[200]; // new一个char数组,大小为200
char *p = new char(200); //new一个char ,其初始值为200

结束寄语

有关vector小细节的介绍就到此结束啦!下篇博文与各位再见面~

写博不易,如蒙厚爱,赏个关注,一键三连~~点赞+评论+收藏🤞🤞🤞,感谢您的支持~~

【❌❌vectorの奇技淫巧⭕⭕】C++ vector 如何正确处理动态申请内存的元素_c++_02


举报

相关推荐

0 条评论