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

最近做个一个模型处理系统,需要处理不同类型和种类的大量的模型数据,因此采用了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中使用的问题
文章图片



【C++局部变量指针保持在List,Vector中使用的问题】求大牛解答,不甚感激。

    推荐阅读