最近做个一个模型处理系统,需要处理不同类型和种类的大量的模型数据,因此采用了List和vector保持识别的不同类型的大量数据,然后分别处理模型,由此遇到如下问题:
这里以一个实例说明,数据类型存储在Node类中,其可以对不同数据进行处理,且能够获得大量数据,LocalPara类则负责处理数据,有一个统一的函数处理,具体见如下代码:
// testLocalPara.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include
#include
#include using namespace std;
class Node{
public:
Node(){
cout << "construct node without para" << endl;
};
Node(double v1, double v2, double v3):x(v1),y(v2),z(v3){
cout << "construct node with para" << endl;
};
~Node(){
cout << "destruct node" << endl;
};
double x;
double y;
double z;
};
class LocalPara
{
public:
LocalPara(){}
~LocalPara(){
if(para.size())
{
/*int num = para.size();
for(int i = 0;
i < para.size();
i++)
{
cout << " index: " << i << endl;
cout << " value: " << para[i]->x << " " << para[i]->y << " " << para[i]->z << endl;
delete para[i];
}*/list::iterator it;
int i = 0;
for(it = para.begin();
it != para.end();
it++)
{
cout << " index: " << i << endl;
cout << " value: " <<(*it)->x << " " << (*it)->y << " " << (*it)->z << endl;
i++;
delete(*it);
}}
} void setvalue()
{
for(int i = 0;
i < 10;
i++)
{
Node* x = new Node(i,i,i);
para.push_back(x);
}
}public:
/*vector para;
*/
list para;
};
int _tmain(int argc, _TCHAR* argv[])
{
LocalPara a;
a.setvalue();
return 0;
}
问题出来了: 1.SetValue这个函数,是将局部的开辟的Node变量存储在链表或者list中,然后通过析构函数去释放,一般情况下,局部变量不能作为返回值,局部变量离开了函数范围,就会释放,为什么这里可以完好的保存。
2.虽然这里能够保持和处理数据,但是遇到一个问题,数据析构的时候特别慢,尤其是当Node里面存有大量数据,且这个List特别长的时候,内存占到几百M的时候,关闭程序,释放内存的速度比较慢 需要一分钟左右,总以为是内存泄露了,但是用输出整个过程,可以明显的看到程序运行完好,没有其他问题。
具体结果如下:
文章图片
【C++局部变量指针保持在List,Vector中使用的问题】求大牛解答,不甚感激。
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题