C++局部变量指针保持在List,Vector中使用的问题

来源:互联网 发布:nginx websocket 配置 编辑:程序博客网 时间:2024/06/05 08:11

最近做个一个模型处理系统,需要处理不同类型和种类的大量的模型数据,因此采用了List和vector保持识别的不同类型的大量数据,然后分别处理模型,由此遇到如下问题:

这里以一个实例说明,数据类型存储在Node类中,其可以对不同数据进行处理,且能够获得大量数据,LocalPara类则负责处理数据,有一个统一的函数处理,具体见如下代码:

// testLocalPara.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <vector>#include <iostream>#include <list>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<Node*>::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<Node*> para;*/list<Node*> para;};int _tmain(int argc, _TCHAR* argv[]){LocalPara a;a.setvalue();return 0;}


问题出来了:

1.SetValue这个函数,是将局部的开辟的Node变量存储在链表或者list中,然后通过析构函数去释放,一般情况下,局部变量不能作为返回值,局部变量离开了函数范围,就会释放,为什么这里可以完好的保存。


2.虽然这里能够保持和处理数据,但是遇到一个问题,数据析构的时候特别慢,尤其是当Node里面存有大量数据,且这个List特别长的时候,内存占到几百M的时候,关闭程序,释放内存的速度比较慢 需要一分钟左右,总以为是内存泄露了,但是用输出整个过程,可以明显的看到程序运行完好,没有其他问题。

具体结果如下:


求大牛解答,不甚感激。

0 0
原创粉丝点击