#ifndef UNICODE
#define UNICODE
#endif
#include <iostream>
#include <Windows.h>
#include <queue>
using namespace std;
void addSomeContent(queue<TCHAR*> &s)
{
static int counter=0;
TCHAR* buffer = new TCHAR[250]; //Allocate memory on heap
wsprintf(buffer,TEXT("foo%d"),counter);
s.push(buffer);
counter++;
if(counter < 10)
addSomeContent(s);
}
int main (void)
{
queue<TCHAR*> strings;
addSomeContent(strings);
while(!strings.empty())
{
wcout<<strings.front()<<endl;
strings.pop();
}
//Here I want to destroy the "buffer" from the function "addSomeContent"
wcout<<TEXT("Memory has been cleaned!\n");
system("pause");
return (0);
}
如果我在函数末尾删除了宽字符数组,我就无法处理引用它的队列。现在,我的简单程序可以编译并运行良好,但显然在堆中保留垃圾不被视为安全的编程实践。
如何删除上次刚用完的“缓冲区”?
您可以使用 queue<unique_ptr<TCHAR[]>>
为了完全避免内存释放,或者您可以在将内存从 queue
中删除之前简单地释放内存。像这样:
delete[] strings.front();
strings.pop();
我是一名优秀的程序员,十分优秀!