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
- C++局部变量指针保持在List,Vector中使用的问题
- 【C++】使用局部变量赋值而非引用,导致内存多次释放的野指针问题
- 返回局部变量指针的问题
- C++返回局部变量的指针问题
- C/C++中全局变量,静态局部变量,局部变量的初始化问题
- C中全局变量和局部变量的初始化问题
- C/C++中函数返回局部变量的问题
- C语言中局部变量的地址覆盖问题
- 关于在MFC中添加C文件 + 关于 new 和 malloc + 静态局部变量指针
- 关于在多线程中,局部变量和全局变量的使用。
- 解决函数中返回局部指针变量的问题,加深理解《堆和栈》问题。
- 解决函数中返回局部指针变量的问题,加深理解《堆和栈》问题。
- 解决函数中返回局部指针变量的问题,加深理解《堆和栈》问题
- c语言中函数返回局部变量的指针(一些容易犯错的地方)
- 关于C语言中返回局部变量和局部指针变量
- 关于C语言中返回局部变量和局部指针变量
- 关于c语言中自动变量(局部自动变量)的空间的分配的问题
- C++:静态局部变量的使用
- Duilib学习笔记《04》— 窗体显示
- 关于错误:"ORA-04091: table is mutating, trigger/function may not see it"的分析(触发器操作自身表)
- 排序2:插入排序(折半插入排序)
- poj 3276 Face the right way(反转)
- hdu4549
- C++局部变量指针保持在List,Vector中使用的问题
- C# 委托实例(跨窗体操作控件)
- 链表,逆波兰表达式
- Duilib学习笔记《03》— 控件使用
- Add a Sensor to a Robot
- wordpress中把Kindeditor和Syntaxhighlighter整合在一起
- POJ 1502 MPI Maelstrom(最短路)
- .NET技术+25台服务器怎样支撑世界第54大网站
- win7 U盘安装ubuntu14.04