所以我在我班的.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吗?或者如何删除它?
答案 0 :(得分:1)
没有。操作系统不会删除动态分配的VideoSample。
线程结束时你必须这样做。
很难从帖子中判断对象的生命周期。如果您的VideoSamples是VideoEncoder类的成员,并且当线程结束时您的VideoEncoder类被销毁,您可以在VideoEncoder的析构函数中执行此操作。如果您的VideoSamples容器在线程结束时被销毁,您可以使VideoSamples保持某种形式的智能指针到您的VideoSample *,以促进更自动的内存管理。
如果try_pop返回true,你也会泄漏内存,因为你将失去指向新分配的VideoSample的指针。