C++局部變量指針保持在List,Vector中使用的問題

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

具體結果如下:


求大牛解答,不甚感激。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章