所以我在类的.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的指针。