最近做個一個模型處理系統,需要處理不同類型和種類的大量的模型數據,因此採用了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的時候,關閉程序,釋放內存的速度比較慢 需要一分鐘左右,總以爲是內存泄露了,但是用輸出整個過程,可以明顯的看到程序運行完好,沒有其他問題。
具體結果如下:
求大牛解答,不甚感激。