【发布时间】:2015-11-06 02:57:52
【问题描述】:
我在我的代码中使用了线程,发现一些内存泄漏,所以我测试了下面的简单代码。
#include <thread>
void foo(){}
int main()
{
for(; ;)
{
std::thread *th = new std::thread(foo)
th->join();
delete th;
}
}
我使用 VC++ Release 模式对其进行了测试,没有更改任何设置,而且我还发现了内存泄漏。当我使用 Windows 任务管理器检查进程时,该程序的内存正在增加。
我认为我的代码中的delete 不起作用。内存泄漏有什么原因吗?
更多细节
在我检查了 cmets 和答案后,我又运行了几分钟的程序。几分钟后,我发现测试程序不会使用更多内存。但是我不确定为什么thread 在delete 之后使用更多内存(其他类不使用),并且我的程序在几分钟后仍然随着内存使用量的增加而关闭。在我的程序中,每个循环只使用了11个threads,所以内存使用量增长缓慢,突然关闭。
【问题讨论】:
-
你到底为什么要
new和delete发帖?只需std::thread th(foo);。 -
可能没有泄漏,但任务管理器不可信。见How precise is Task Manager?
-
@D.Lucit 这不是使用 new 和 delete 的理由。
-
std::vector<std::thread>可以正常工作。 -
@D.Lucit
push_back也可以在vector内部移动对象,但最好使用vec.emplace_back(/*args*/);直接在vector末尾构造一个新线程。
标签: c++ multithreading memory-leaks destructor