c++队列元素含指针怎么释放 10
我定义了一个结构体structIMG{char*img;intimgSize;}然后声明了一个队列:queue<IMG>qimg;声明对象并进队:IMG_img;_img...
我定义了一个结构体
struct IMG{
char *img;
int imgSize;
}
然后声明了一个队列:
queue<IMG> qimg;
声明对象并进队:
IMG _img;
_img.img = new char[100];
_img.imgSize = 100;
qimg.push(_img);
之后用完pop时,如何释放掉这块new出来的内存。
注:直接pop不行,我试过了。
问题已解决。
仅pop的话,new出来的内存块还存在,在整个工程运行结束时才会被释放。如果队列元素push和pop很频繁的话,可以在IMG析构里释放指针区域。由于析构在工程结束时也会被自动调用,所以要加一个判断,以免被二次delete。 展开
struct IMG{
char *img;
int imgSize;
}
然后声明了一个队列:
queue<IMG> qimg;
声明对象并进队:
IMG _img;
_img.img = new char[100];
_img.imgSize = 100;
qimg.push(_img);
之后用完pop时,如何释放掉这块new出来的内存。
注:直接pop不行,我试过了。
问题已解决。
仅pop的话,new出来的内存块还存在,在整个工程运行结束时才会被释放。如果队列元素push和pop很频繁的话,可以在IMG析构里释放指针区域。由于析构在工程结束时也会被自动调用,所以要加一个判断,以免被二次delete。 展开
1个回答
展开全部
#pragma once //用数组实现的循环队列//SeqQueue.h#include "stdafx.h"#include "Windows.h"#include "stdlib.h"#include "iostream.h"template<class T>class SeqQueue{private: T *queue; int front,rear,MaxSize;public: SeqQueue(int sz=30);//构造函数 SeqQueue(SeqQueue& sq);//拷贝构造函数 SeqQueue(int arraysz,T *a,int sz=30);//构造函数 void MakeEmpty();//清空队列 bool IsEmpty();//队列是否为空 int GetLength();//获得长度 int GetMaxSize();//获得队列大小 T &GetFront();//获得队首元素 bool EnQueue(T &x);//入队 bool OutQueue(T &x);//出对 void show(); ~SeqQueue();//析构函数}; template<class T>SeqQueue<T>::SeqQueue(int sz){ queue=new T[sz]; MaxSize=sz; front=rear=0;} template<class T>SeqQueue<T>::SeqQueue(SeqQueue& sq){ queue=new T[sq.MaxSize]; MaxSize=sq.MaxSize; front=rear=0; for(int i=0;i<sq.GetLength();i++) { queue[i]=sq.queue[i]; rear=(rear+1)%MaxSize; }} template<class T>SeqQueue<T>::SeqQueue(int arraysz,T *a,int sz){ if(arraysz>sz) { cerr<<"The Array is too Large"; exit(1); } queue=new T[sz]; MaxSize=sz; front=rear=0; for(int i=0;i<arraysz;i++) { queue[i]=a[i]; rear=(rear+1)%MaxSize; }} template<class T>void SeqQueue<T>::MakeEmpty(){ front=rear=0;} template<class T>bool SeqQueue<T>::IsEmpty(){ return front==rear;} template<class T>int SeqQueue<T>::GetLength(){ return ((rear-front)+MaxSize)%MaxSize;} template<class T>int SeqQueue<T>::GetMaxSize(){ return MaxSize;}
大雅新科技有限公司
2024-11-19 广告
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询