我在我的代码中使用了线程并发,发现出现了一些内存泄漏问题,因此我尝试测试了下面这段简单的代码。
#include <thread>
void foo(){}
int main()
{
for(; ;)
{
std::thread *th = new std::thread(foo)
th->join();
delete th;
}
}
我在未更改任何设置的情况下使用VC++ Release模式进行了测试,并且我也发现了内存泄漏。当我使用Windows任务管理器检查该进程时,该程序的内存不断增加。
我认为我的代码中的
delete
没有起作用。是否有任何原因导致内存泄漏?更多细节:
在检查注释和答案后,我运行了这个程序更多的分钟数。我发现测试程序在几分钟后不会再使用更多的内存。然而,我不确定为什么
thread
在delete
之后会使用更多的内存(其他类不会),并且我的程序仍然会在几分钟后随着内存使用量的增加而关闭。在我的程序中,每个循环只使用11个thread
,因此内存使用量增长缓慢,然后突然关闭。
new
和delete
来创建线程?只需要使用std::thread th(foo);
就可以了。 - juanchopanzastd::vector<std::thread>
可以正常工作。 - Quentinpush_back
也可以将对象移动到向量内部,但最好使用vec.emplace_back(/*args*/);
直接在向量末尾构造一个新线程。 - Quentin