gpt4 book ai didi

c++ - 在函数 B 中释放函数 A 的运行时内存

转载 作者:太空宇宙 更新时间:2023-11-04 16:25:18 25 4
gpt4 key购买 nike

#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();

关于c++ - 在函数 B 中释放函数 A 的运行时内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12523776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com