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

时间:2010-11-09 13:18:29

标签: c++ multithreading data-structures boost

所以我在我班的.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吗?或者如何删除它?

1 个答案:

答案 0 :(得分:1)

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

线程结束时你必须这样做。

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

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