所以我在类的.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 *的智能指针,以促进更自动的内存管理。

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

07-24 14:15