gpt4 book ai didi

c++ - 当boost线程被回收时,在其中创建的临时变量会从内存中删除吗?

转载 作者:行者123 更新时间:2023-11-28 08:25:45 25 4
gpt4 key购买 nike

所以我在类的 .h 文件中有一个结构和一个队列(已修改,取自 here ),例如:

  struct VideoSample
{
const unsigned char * buffer;
int len;
};

concurrent_queue<VideoSample * > VideoSamples;

在 .cpp 文件中,我有一个函数,我每次都在一个新线程中运行,发送一些参数:

void VideoEncoder::AddFrameToQueue(const unsigned char *buf, int size )
{
VideoSample * newVideoSample = new VideoSample;
VideoSamples.try_pop(newVideoSample);
newVideoSample->buffer = buf;
newVideoSample->len = size;
VideoSamples.push(newVideoSample);
}

如您所见,我尽量让 VideoSamples 中的元素不超过一个(要求)。

我想知道操作系统会在线程中断时删除 newVideoSample 吗?或者怎么删除?

最佳答案

没有。操作系统不会删除动态分配的 VideoSample。

您必须在线程结束时执行此操作。

很难从您的帖子中判断对象的生命周期。如果您的 VideoSamples 是 VideoEncoder 类的成员,并且您的 VideoEncoder 类在线程结束时被销毁,您可以在 VideoEncoder 的析构函数中执行此操作。如果您的 VideoSamples 容器在线程结束时被销毁,您可以让 VideoSamples 保存某种形式的指向您的 VideoSample* 的智能指针,以 boost 更自动的内存管理。

如果 try_pop 返回真,您也会泄漏内存,因为您将丢失指向新分配的 VideoSample 的指针。

关于c++ - 当boost线程被回收时,在其中创建的临时变量会从内存中删除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4134053/

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